一、Docker安装
1、获取官方帮助文档
1.从官网最下方Docs选项中打开帮助文档。
2.选择下载并安装
3.选择linux
4.左侧选择在centos中安装
可以看到此页为centos7中安装docker的官方教程
2、安装Docker
#卸载命令
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#需要的安装包
yum install -y yum-utils
#设置镜像仓库
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#默认为国外镜像仓库,此处替换为阿里云
#更新软件包索引
yum makecache fast
#安装docker相关内容,docker-ce为社区版,docker-ee为企业版
yum install docker-ce docker-ce-cli containerd.io
#启动docker
systemctl start docker
#验证是否启动成功
docker version
#有以上信息说明安装成功
#hello world(此步之前可能需要提前配置镜像加速)
docker run hello-world
#输出以下结果
#查看镜像信息
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 5 months ago 13.3kB
#配置镜像加速
#登录阿里云,找到右上角控制台面板,打开后搜索容器镜像服务
#打开最下方镜像加速器
#输入右方给出的所有命令
mkdir -p /etc/docker#创建加速文件目录
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["阿里云给出的加速网址"]
}
EOF
systemctl daemon-reload
systemctl restart docker
二、Run的流程和Docker原理
1、回顾hello-world流程
hello-world是如何启动的
通过上图可以得出以下工作流程图
2、底层原理
Docker是怎么工作的?
Docker是一个client-server结构的系统,Docker的守护进程运行在主机上。客户端通过socket来访问。
Docker-server接收到Docker-client的指令后执行指令。
Docker为什么比虚拟机快?
1.Docker有着比虚拟机更少的抽象层。
2.Docker利用的是宿主机的内核,虚拟机需要Guest OS。Docker是在主机上直接安装Docker服务,所有的东西都运行在Docker服务上。
如图
所以,新建一个容器时,Docker不需要和虚拟机一样加载一个完整的操作系统,自然比虚拟机更快。
三、Docker的常用命令
1、帮助命令
docker version #显示版本信息
docker info #显示详细信息
docker '命令' --help #显示命令信息
2、帮助文档
帮助文档的地址:https//docs.docker.com/engine/reference/commandline/
在官方帮助文档中能查看所有命令信息
3、镜像命令
docker images
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 5 months ago 13.3kB
REPOSITORY #镜像仓库源(镜像名)
TAG #镜像标签(版本标签)
IMAGE ID #镜像id
CREATED #镜像创建时间
SIZE #镜像大小
#可选项
-a, --all #显示所有信息(列出所有镜像)
-q, --quiet #只显示id
docker search
[root@localhost ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 11308 [OK]
mariadb MariaDB Server is a high performing open sou… 4297 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 838 [OK]
percona Percona Server is a fork of the MySQL relati… 550 [OK]
phpmyadmin phpMyAdmin - A web interface for MySQL and M… 300 [OK]
#可选项
-f, --filter='条件' #通过条件过滤
docker pull
[root@localhost ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
e1acddbe380c: Pull complete #分层下载,联合文件系统,docker的灵魂。
bed879327370: Pull complete
03285f80bafd: Pull complete
ccc17412a00a: Pull complete
1f556ecc09d1: Pull complete
adc5528e468d: Pull complete
1afc286d5d53: Pull complete
6c724a59adff: Pull complete
0f2345f8b0a3: Pull complete
c8461a25b23b: Pull complete
3adb49279bed: Pull complete
77f22cd6c363: Pull complete
Digest: sha256:d45561a65aba6edac77be36e0a53f0c1fba67b951cb728348522b671ad63f926
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
docker rmi
[root@localhost ~]# docker rmi -f 镜像id #删除指定镜像
[root@localhost ~]# docker rmi -f 镜像id 镜像id 镜像id #删除多个镜像
[root@localhost ~]# docker rmi -f $(docker images -aq) #按id删除所有镜像
Untagged: mysql:latest
Untagged: mysql@sha256:d45561a65aba6edac77be36e0a53f0c1fba67b951cb728348522b671ad63f926
Deleted: sha256:5a4e492065c722ec8cc7413552bafc6fd5434c5ad90797e898ccc4e347e21aa5
Deleted: sha256:816bf92c28337cd97393cb1fab7697398c9b657baa8e80ad394e1193bdd7c323
Deleted: sha256:4d9cad11f64589b397b1033d6f14cea1794efbee0a9923932fb3394a67cb9812
Deleted: sha256:d8cc28a31b469770ffe2239a29aaef8745fedc4df3c545b1615ba864796709a3
Deleted: sha256:c65a377e07f1205f3c28f7067d2ac4da3a65fbe7c1b4606b48028db3818d2f4c
Deleted: sha256:7dcd840f1d4be1a565f470453489932a17c62ed36b959d7839f004606ba22f0b
Deleted: sha256:1438a7497295aed687ea1875073a1f9faa6a308f787767b952da4a1a21e2c2c6
Deleted: sha256:c728863b4742db55b9630b0129abac718c8c9704e5ed86e8af93dfb47a0f6214
Deleted: sha256:0f12df3ff796b6fb619c63bf2f78f16d1033746e19f75ffc2d8d72ea69242ad4
Deleted: sha256:3072318e40ebff019298a59290e615ad6170a651f3121c0e356dcf3dd7426136
Deleted: sha256:a69e3133dd3c0a81bd439120abb8f98e43c1581629896725b968db906c8fdfac
Deleted: sha256:6d9498fd63c38c4b0b9bbc563087b4bc164b2fb5211832a8d43c60a9692a7f84
Deleted: sha256:f68ef921efae588b3dd5cc466a1ca9c94c24785f1fa9420bea15ecc2dedbe781
Untagged: hello-world:latest
Untagged: hello-world@sha256:0fe98d7debd9049c50b597ef1f85b7c1e8cc81f59c8d623fcb2250e8bec85b38
Deleted: sha256:d1165f2212346b2bab48cb01c1e39ee8ad1be46b87873d9ca7a4e434980a7726
#可选项
-f #按id删除镜像
#在docker rmi -f $(docker images -aq)报错的情况下
1)批量停止container:
sudo docker ps -a | awk '{print $1}'| grep -v CONTAINER | xargs sudo docker stop
2)批量删除container:
sudo docker images | awk '{print $3}' | grep -v IMAGE | xargs sudo docker rmi
3)批量删除image:
sudo docker images | awk '{print $1}' | grep -v REPOSITORY | xargs sudo docker rmi
4、容器命令
要先下载镜像才能创建容器
新建容器并启动
[root@localhost ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
7a0437f04f83: Pull complete
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
在centos中再下载一个centos镜像,之后操作都在该镜像中
run
docker run [可选参数] image
#参数说明
--name='name' #容器命名
-d #以后台方式运行
-it #使用交互方式运行(进入容器查看内容)
-p(小写) #指定容器端口
-p 'port':'port' #端口映射,前者为主机端口,后者为容器端口
-p ip:'port':'port'
-p 'port' #容器端口
-P(大写) #使用随机端口
可以看出,用户名已经变为该镜像的id,在xshell中显示的文件夹颜色也与主机不同。
镜像中的系统很多都是不完善的,甚至很多基础命令都用不了。
ps
[root@localhost /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e25018a0b96d centos "/bin/bash" About a minute ago Exited (0) About a minute ago pedantic_knuth
98d1443a7c2d centos "/bin/bash" 9 minutes ago Exited (0) 2 minutes ago infallible_raman
bc63240bf7da d1165f221234 "/hello" 5 hours ago Exited (0) 5 hours ago happy_archimedes
#可选项
-a #列出所有运行过的容器
-n='num' #显示最近创建过的几个容器
-q #只显示编号
退出容器
exit #停止容器并退出
ctrl+p+q #退出容器不停止
删除容器
rm '容器id' #删除指定id的容器,不能删除运行中的容器
rm -f #强制删除
rm -f $(docker ps -aq) #强制删除所有容器(按id)
开启和停止容器
docker start '容器id'
docker restart '容器id'
docker stop '容器id'
docker kill '容器id'
#含义与Linux基础操作相同
四、常用其他命令
1、后台启动
#命令docker run -d '镜像名'
[root@localhost /]# docker run -d centos
3aac07f49b2922859b6cb4aa3f5adf21b5278170a599380dae01bbbc90a2538d
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#问题:后台启动后进程自动停止
#docker容器使用后台启动时,必须要有一个前台进程,否则会自动停止。
#比如nginx容器启动后,发现自己没有提供服务就立刻停止(自杀),他认为自己没有程序了。
2、查看日志
docker logs -f -t --tail #发现容器没有日志
#自己写一段shell脚本
"while true;do echo 123456;sleep 1;done"
[root@localhost /]# docker run -d centos /bin/sh -c "while true;do echo 123456;sleep 1;done"
372dd788f6ee829092a28d94dc40536725767d8acce4907f4c99ebbf0658821a
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
372dd788f6ee centos "/bin/sh -c 'while t…" 6 seconds ago Up 6 seconds festive_banach
[root@localhost /]# docker logs -f -t --tail 10 372dd788f6ee
2021-08-23T07:43:30.674632053Z 123456
2021-08-23T07:43:31.680282821Z 123456
2021-08-23T07:43:32.685241177Z 123456
2021-08-23T07:43:33.689979428Z 123456
2021-08-23T07:43:34.694671996Z 123456
2021-08-23T07:43:35.699345232Z 123456
2021-08-23T07:43:36.701925301Z 123456
2021-08-23T07:43:37.707651945Z 123456
2021-08-23T07:43:38.712024853Z 123456
2021-08-23T07:43:39.717165858Z 123456
3、查看容器中进程信息
#docker top 容器id
[root@localhost /]# docker top 372dd788f6ee
UID PID PPID C STIME TTY TIME CMD
root 3784 3766 0 15:43 ? 00:00:00 /bin/sh -c while