狂神说Docker

弱小和无知不是生存的障碍,傲慢才是。
学前准备:SpringBoot、linux命令基础

Docker学习

入门阶

Docker概述
Docker安装
Docker命令
镜像命令
容器命令
操作命令

Docker镜像
容器数据卷
DockerFile
Docker网络原理(需要掌握计算机原理的基础)
IDEA整合Docker

进阶(学会才能在工作凭借docker吃饭)

Docker Compose—docker集群
Docker Swarm—简化版的k8s—集群管理
CI/CD(持续集成、持续部署) 例如:Jenkins流水线

Docker为什么出现?

一款产品:开发-上线两套环境!应用环境,应用配置!
开发一运维。问题:我在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说,考验就十分大?
环境配置是十分的麻烦,每一个机器都要部署环境(集群Redis.ES、Hadoop….)!费时费力。
发布一个项目(jar+(Redis MySQL jdk ES)),项目能不能都带上环境安装打包!

之前在服务器配置一个应用的环境Redis MySQL jdk ES Hadoop,配置超麻烦了,不能够跨平台。

Docker优势:

vm:linux centos原生镜像(一个电脑!) 隔高,需要开启多个虚教机! 几个G 几分钟docker:隔高,镜像(最核心的环境4m+jdk,mysql)十分的小巧, 运行载像就可以了!小巧! 几个M Kb 秒级启动!

关于Docker

基于go语言开发
官网地址:https://www.docker.com/
指导文档地址:https://docs.docker.com/
发布镜像网址:https://hub.docker.com/

Docker可以做什么?

比较Docker和虚拟机技术的不同:
·传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
·容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了
·每个容器间是互相需离,每个容器内都有一个属于自己的文件系统,互不影响。

DevOps (研发,运维)

应用更快速的交付和部署
传统:一堆帮助文档,安装程序
Docker:打包镜像发布测试,一健运行
更便捷的升级和扩缩容
使用了Docker之后,我们部器应用就和搭积木一样!
项目打包为一个镜像,扩展服务器A!服务器B
更简单的系统运维
在容器化之后,我们的开发,测试环境都是高度一致的。
更高效的计算资源利用:
Docker是内核级别的毒拟化,可以再一个物理机上可以运行很多的容器实例!服务器的性能可以被压榨到极致。

Docker安装

Docker基本组成

镜像(image):
docker说像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像==>run ==>tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。

容器(container):
Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。
启动,停止,删除,基本命令!
目前就可以把这个容器理解为就是一个简易的inux系统

仓库(repository):
仓库就是存放镜像的地方!
仓库分为公有仓库和私有仓库!
Docker Hub(默认是国外的)
阿里云.….都有容器服务器(配置镜像加速!)

安装Docker(参考官网:官方部署指导文档

环境准备:
Centos7

环境查看:

[root@docker01 ~]# uname -r
3.10.0-862.el7.x86_64
[root@docker01 ~]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

安装:参考帮助文档
1.清楚旧版本
2.安装依赖包
yum-utils
3.设置镜像的仓库(替换官方镜像地址为阿里镜像地址)
4.更新yum软件包索引
yum makecache fast
5.安装docker ce社区版 ee企业版
6.启动 测试是否安装成功
systemctl start docker
docker -v

配置阿里云加速

https://cn.aliyun.com/
产品分类—》搜索:容器与镜像服务—》管理控制台—》账号登入—》镜像加速器

在docker中holle-world原理

底层原理

Docker是怎么工作的?

Docker是一个Client·Sener结构的系统,Docker的守护进程运行在主机上,通过Socke从客户端访问!
DockerServer 授收到Docker-Client的指令,就会执行这个命令!

Docker为什么比VM快?

1.Docker有着比虚拨机更少的抽象层。
2、docker利用的是宿主机的内核,Vm需要是Guest OS

Docker的常用命令

帮助命令

docker version
docker info #显示docker的系统信息,包含镜像和容器的数量
docker 命令 --help #
帮助文档的地址:https://docs.docker.com/reference/

镜像命令:

docker images 查看镜像

[root@docker01 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              831691599b88        4 weeks ago         215MB

#解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小

[root@docker01 ~]# docker images --help
Usage:	docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Options:
  -a, --all             Show all images (default hides intermediate images)
  -q, --quiet           Only show numeric IDs

docker search mysql 搜索mysql

[root@docker01 ~]# docker  search mysql
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   9743  
[root@docker01 ~]# docker search --help
  -f, --filter filter   Filter output based on conditions provided
-filter-STARS=3000			搜索出来的镜含就是STARS大于3000的

docker pull 服务:【tag】 下载镜像

[root@docker01 ~]# docker pull mysql
[root@docker01 ~]# docker pull mysql:5.7

docker rmi -f 容器id 删除镜像
docker rmi -f $(docker images -aq) 删除所有镜像

容器命令:

[root@docker01 ~]# docker run -d --name nginx01 -p3344:80 nginx

docker run 【可选参数】 镜像名 启动镜像
#参数说明
–nane="Name”容器名字 tomcat01 tomcat02,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口,例:-p 8080:8080
-p(大写) ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
-P(小写) 随机指定端口

#启动并进入容器

[root@docker01 ~]# docker run -it centos /bin/bash
[root@cfa9e2dda12c /]# 

#退出容器
[root@cfa9e2dda12c /]# exit
Ctrl+P+Q 容器不停止退出
#列出所有运行中的容器
docker ps 列出当前正在运行的容器
-a 列出当前正在运行的容器+历史运行过的容器
-n=? 显示最近创建的容器
-q 只显示容器的编号

docker rm 容器id 删除容器

docker rm -f $(docker ps -aq) 删除所有的容器
docker ps -a -q | xargs docker rm 删除若有的容器

启动和停止容器

docker start 容器id #开启容器
docker restart 容器id
docker stop 容器id
docker kill 容器id

常用的其他容器命令

后台启动容器
docker run -d centos #后台启动容器
问题(docker ps,发现centos 停止了)
#常见的坑:docker 容器使用后台运行,就必须要有要一个前台选程,docker发现没有应用,就会自动停止
#nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了

查看日志

docker logs -tf --tail 行数 容器id 查看日志

查看容器中进程信息ps

docker top 容器id

查看镜像的元数据

docker inspect 容器id

进入当前正在运行的容器

#我们通常容器都是使用后台方式运行的,需要进人容器,参改一些配置

#命令
docker exec -it 容器id bashshell 进入容器后开启一个新的终端,可以在里面操作
docker attach 容器id 进入容器正在执行的的终端,不会启动新的进程

从容器拷贝文件到主机

docker cp 容器id:容器内路径 目的的主机路径

命令小结:

attach
Attach to a running container
#当林she11下attach 连接指定运行镜像
build
Build an isage from a Dockerfile #通过Dockerfile定制镜像
comit
Create a new image from a container changes
#损交当前容器为新的镜像
cp
copy files/folders fron the containers filesysten to the host path
从容器中持贝指定文作或者目 录到宿主机中
create
Create a new container
#创建一个新的容器,同run,但不启动容器
diff
Inspect changes on a container’s filesysten
#查看 docker容器变化
events
Get real time events from the server
#从docker 服务获取容器实时事件
exec
Run a command in an existing container
#在已存在的容器上运行命令
export
Strean the contents of a container as a tar archive
#导出客器的内容流作为一个tar日档文件[对应 import]
history
Show the history of an inage
#展示一个硫像形成历史
images
List inages
#列出系统当前统像
iport
Create a new filesystem image from the contents of a tarbal1
#从tar包中的内容创建一个新的文件系 统映像[对应export]
info
Display system-wide information
#显示系统相关信息
inspect
Return 1ow-level information on a container
#查看容器详细信息
kill Kill a running container #kill 指定 docker 容器
load
Load an image from a tar archive
#从一个tar 包中加就一个镜像[对应 save]
login
Register or Login to the docker registry server
#注据或省登陆一个docker 源服务器
logout
Log out from a Docker registry server
#从当菌Docker registry 退出
logs
Fetch the logs of a container
#输出当前容器日志信息
port
Lookuf the public-facing port which is NAT-ed to PRIVATE_PORT
#查看块射端口对应的容器内部希端 口
pause
Pause all processes within a container #音停容器
ps List containers #列出容器列素
pull
Pull an inage or a repository fron the docker registry server
#从docker镜食源服务器拉取指定镜 像或者库载像
push
push an image or a repository to the docker registry server
#推送指定镜像或者库横像至docker源 服务器
restart
Restart a running container #重启运行的容器
rm
Remove one or more containers #移除一个或者多个容器
rmi Renove one or more images
#移除一个或多个镜像[无容器使用该镜像才可删除,否则露制除相关客 器才可丝镜或-f鲨制联除1
run
Run a comnand in a new container
#创建一个新的容器并运行一个命令
save
save an image to a tar archive
#保存一个硫像为一个tar 包[对应load]
search
search for an inage on the Docker Hub
#在 dockerhub 中拨索镜费
start start a stopped containers#启动容器
stop Stop a running gontainers#停止容器
tag Tag an image into a repository#给源中镜像打标签
top
Lookup the runing processes of a container
#查看容器中运行的进程信息
unpause Unpause a paused container #取消香停容器
version
Show the docker version information #查看docker 额本号
wait
Block until a container stops,then print its exit code
#黄取容器停止时的混出状态值

练习:

1.Docker安装Nginx

1.1思考问题:我们每次改动nginx配置文件,都需要进入容器内部?十分的麻烦,我要是可以在容器外部提供一个快射路径,达到在容器修改文件名,容器内部就可以自动修改?-v数据卷!

[root@docker1 ~]# mkdir /var/data
[root@docker1 ~]# docker run -it -v /var/data:/abc myos
[root@f1fb58b85671 /]# cd /abc/
[root@f1fb58b85671 abc]# touch f1
[root@f1fb58b85671 abc]# ls
f1  zhy

1.1.1思考:Docker容器里的配置文件怎么修改?
下载vim
这里要下载vim,不然无法对文件进行修改
具体执行如下两个命令:

apt-get update、apt-get install vim

2.Docker安装一个tomcat

#官方的使用(可以直接运行镜像,会自动下载镜像)

docker run -it --rm tomcat:9.0

#我们之前的启动都是后台,停止了容器之后,容器还是可以查到
docker run -it --rm,一般用来测试,用完就删除

#菜鸟练习
#下载
docker pull tomcat

#启动运行

docker run -d -p --name tomcat01 3355:8080 tomcat

测试访问没有间题
进入容器

[root@kuangshen home]# docker exec -it tomcato1 /bin/bash

#发现问题
1.linux命令少了
2.没有webapps,阿里云镜像的原因。默认是最小的镜份,所有不必要的都剧除排。
#保证最小可运行的环境!
2.1思考问题
我们以后要部署项目,如果每次都要进入容器是不是十分麻烦?我要是可以在容器外部提供一个映射路径,webapps,我们在外部放置项目,就自动同步到内部就好了!

3.部署es+kibana

#es操露的端口很多!
#es十分的耗内存
#es的数据一般需要放置到安全目录!挂载
#–net somenetwork ? 网络配置
#-e “discovery.type-single-node” 集群信息

#启动elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e “discovery.type-single-node” elasticsearch:7.6.2
#启动了linux就卡住了docker stats查看cpu的状态
#es是十分耗内存的

#查看docker stats 容器id
#赶紧关闭,增加内存的限制,修改配置文作-e环境配置修改

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e"discovery.type-single-node" -e E5_JAVA_0PTS="-XmS64m-Xmx512m" elasticsearch:7.6.2

思考:使用kibana连接es?思考网络如果才能连接过

docker网络原理

可视化

1.portainer
安装

docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

2.Rancher(CI/CD再用)

Docker镜像讲解

镜像是什么

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
所有的应用,直接打包docker课像,就可以直接跑起来!
如何得到观像:
·从远程仓库下载
·朋友拷贝给你
·自配制作一个镜像DockerFile

Docker镜像加载原理

UnionFS(联合文件系统)
分层理解

commit镜像—提交一个自己的镜像

[root@docker01 ~]# docker run -d -p 8080:8080 --name tomcat01 tomcat
9ecabbcd7092a7103907c27e9e62d585a913a302aee1f77888b8470adb1149a2
[root@docker01 ~]# docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                    NAMES
9ecabbcd7092        tomcat                "catalina.sh run"        6 seconds ago       Up 5 seconds        0.0.0.0:8080->8080/tcp   tomcat01
d64486213e0d        portainer/portainer   "/portainer"             42 minutes ago      Up 42 minutes       0.0.0.0:8088->9000/tcp   exciting_swirles
d0ba2c986d32        nginx                 "/docker-entrypoint.…"   6 hours ago         Up 6 hours          0.0.0.0:8000->80/tcp     nginx01
[root@docker01 ~]# docker exec -it tomcat01 /bin/bash
root@9ecabbcd7092:/usr/local/tomcat# ls
BUILDING.txt	 LICENSE  README.md	 RUNNING.txt  conf  logs	    temp     webapps.dist
CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin	      lib   native-jni-lib  webapps  work
root@9ecabbcd7092:/usr/local/tomcat# ls webapps/
root@9ecabbcd7092:/usr/local/tomcat# cp -pr webapps.dist/* webapps/
root@9ecabbcd7092:/usr/local/tomcat# ls webapps/
ROOT  docs  examples  host-manager  manager
[root@docker01 ~]# docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                    NAMES
9ecabbcd7092        tomcat                "catalina.sh run"        2 minutes ago       Up About a minute   0.0.0.0:8080->8080/tcp   tomcat01
d64486213e0d        portainer/portainer   "/portainer"             44 minutes ago      Up 44 minutes       0.0.0.0:8088->9000/tcp   exciting_swirles
d0ba2c986d32        nginx                 "/docker-entrypoint.…"   6 hours ago         Up 6 hours          0.0.0.0:8000->80/tcp     nginx01
[root@docker01 ~]# docker commit -a='wyi' -m="add webapps app" 9ecabbcd7092 tomcat-wangyi:1.0
sha256:86f66ef2520da9dcb4070c86dab632461164a3a964825d741e34e131198d933a
[root@docker01 ~]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
tomcat-wangyi         1.0                 86f66ef2520d        7 seconds ago       652MB
tomcat                latest              df72227b40e1        2 days ago          647MB
mysql                 latest              6e447ce4863d        5 days ago          544MB
nginx                 1.18.0              8fcf4560562d        8 days ago          132MB
nginx                 latest              0901fa9da894        8 days ago          132MB
centos                latest              831691599b88        4 weeks ago         215MB
portainer/portainer   latest              cd645f5a4769        6 weeks ago         79.1MB
elasticsearch         7.6.2               f29a1ee41030        3 months ago        791M

docker命令概括图

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐