帮助命令
docker version #查看版本的信息
docker info #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help #帮助命令
官方学习文档:https://docs.docker.com/engine/reference/commandline/dockerd/
镜像命令
docker images #列出本地镜像
Options:
-a, --all Show all images (default hides intermediate images) #:列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
-q, --quiet Only show image IDs #只显示镜像id
docker search 搜索命令
docker search mysql #搜索mysql
docker search mysql --filter=STARS=3000 #过滤,STARS>=3000的数据查询出来
----
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker search mysql --filter=STARS=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 11306 [OK]
mariadb MariaDB Server is a high performing open sou… 4294 [OK]
docker pull 下载镜像
# 下载镜像 docker pull 镜像名:[版本]
docker pull mysql #不写版本,默认下载latest,也就是最新版
Using default tag: latest
latest: Pulling from library/mysql
e1acddbe380c: Pull complete #分层下载,docker image的核心,联合文件系统
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官方看看有没有对应的版本,有才能下载
docker pull mysql:5.7
5.7: Pulling from library/mysql
e1acddbe380c: Already exists
bed879327370: Already exists
03285f80bafd: Already exists
ccc17412a00a: Already exists
1f556ecc09d1: Already exists
adc5528e468d: Already exists
1afc286d5d53: Already exists #上面这些已经存在了,就不会再下载,共用,联合文件系统的功能
4d2d9261e3ad: Pull complete
ac609d7b31f8: Pull complete
53ee1339bc3a: Pull complete
b0c0a831a707: Pull complete
Digest: sha256:7cf2e7d7ff876f93c8601406a5aa17484e6623875e64e7acc71432ad8e0a3d7e
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
docker rmi 删除镜像
docker rmi -f 镜像id
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker rmi -f 5a4e492065c7 #删除指定镜像
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
docker rmi -f 镜像id 镜像id 镜像id #删除多个镜像
docker rmi -f $(docker images -aq) #删除全部的镜像
容器命令
说明:有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习
docker pull centos
新建容器并启动
/bin/bash的作用是因为docker后台必须运行一个进程,否则容器就会退出,在这里表示启动容器后启动bash。
docker run [可选参数] image(镜像名称) /bin/bash
#参数说明
--name="Name" 容器名字, tomcat01 xie01 ,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p(小p) 指定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口 (常用)
-p 容器端口
-P(大p) 随机指定端口
#docker run -it centos /bin/bash
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker run -it centos /bin/bash #启动并进入容器
[root@3e7296da4cc4 /]# ls #基础版本的centos 很多命令都是不完善的
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
#给容器取名
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker run -it --name=myxie666666 centos /bin/bash
[root@d43bd82483af /]#
查看容器
docker ps #查看正在运行的容器
docker ps -a #查看当前运行的容器+历史运行过的容器
docker ps -n=? #显示最近创建的容器,指定个数
docker ps -q #只显示容器的编号
退出容器
#退出命令
exit #容器退出并停止
CTRL +P +Q #容器不停止退出
删除容器
docker rm 容器id #删除指定的容器,不能删除正在运行的容器 如果要强制删除, rm -f
docker rm -f $(docker ps -aq) #删除所有的容器 去掉-f就是删除所有没有运行的容器
docker ps -a -q|xargs docker rm #删除所有的容器
启动容器和停止容器
docker start 容器id/name #启动容器
docker restart 容器id/name #重启容器
docker stop 容器id/name #停止当前正在运行的容器
docker kill 容器id/name #强制停止当前容器
常用其他命令
容器启动的一些注意点:
使用docker run -d 镜像名 ,创建容器在以守护状态在后台运行,因为容器没有前台进程,容器会自动关闭,就算使用docker start 容器id/name启动,也会马上关闭就像没启动一样,如果使用 docker run -dit(也就是-d -it) 镜像名,-it进入到容器的交互模式,也就是进入容器 ,但因为-d的存在,并不会进入容器,在后台运行,但是这时的容器是启动状态!!,还有注意一点时使用 -d参数之后声明该容器是守护状态,指定程序结束后,容器也会结束,在这加上/bin/bash也是立马结束的,原因待查,但应该是一开始bash就结束了,导致容器也结束了
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker run -d --name=xie1 centos
2800c5c52dc2c55d7be8f1daa1d6997b04dfa61fb4a30fbaf0c254b4d71df2a4
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker run -dit --name=xie2 centos
282205f26662d2b2b5a8e306fc24a1122b2b60a10cf04f1c483962bc08e1fa60
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
282205f26662 centos "/bin/bash" 4 seconds ago Up 3 seconds xie2
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker run -d --name=xie3 centos /bin/bash #容器未启动
ab27d9cd21b2f7d76de28d491de5723dbf99a5d5307134ade162f62dbfa40785
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
282205f26662 centos "/bin/bash" 42 seconds ago Up 41 seconds xie2
查看日志
docker logs -tf --tail 10(number) 容器id/name #显示10条日志
-tf #显示日志
--tail number #显示日志条数 number必须写
查看容器中进程信息
docker top 容器id/name
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker top qiao1
UID PID PPID C
root 29698 29680 0
查看镜像的元数据
#命令
docker inspect 容器id/name
#测试
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker run -dit --name=qiao1 centos
792acc429152abf7fbad2f9c39fd46ac136d540bdf6ae690b7bc85791b11c06b
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
792acc429152 centos "/bin/bash" 5 seconds ago Up 5 seconds qiao1
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker inspect qiao1
[
{
"Id": "792acc429152abf7fbad2f9c39fd46ac136d540bdf6ae690b7bc85791b11c06b",
"Created": "2021-08-21T13:14:03.053742853Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 29698,
"ExitCode": 0,
"Error": "",
"StartedAt": "2021-08-21T13:14:03.325766259Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55",
"ResolvConfPath": "/var/lib/docker/containers/792acc429152abf7fbad2f9c39fd46ac136d540bdf6ae690b7bc85791b11c06b/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/792acc429152abf7fbad2f9c39fd46ac136d540bdf6ae690b7bc85791b11c06b/hostname",
"HostsPath": "/var/lib/docker/containers/792acc429152abf7fbad2f9c39fd46ac136d540bdf6ae690b7bc85791b11c06b/hosts",
"LogPath": "/var/lib/docker/containers/792acc429152abf7fbad2f9c39fd46ac136d540bdf6ae690b7bc85791b11c06b/792acc429152abf7fbad2f9c39fd46ac136d54
0bdf6ae690b7bc85791b11c06b-json.log", "Name": "/qiao1",
"RestartCount": 0,
"Driver": "overlay2",
Docker中的Dockerfile
什么是 Dockerfile?
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
使用 Dockerfile 定制镜像
这里仅讲解如何运行 Dockerfile 文件来定制一个镜像,具体 Dockerfile 文件内指令详解,在后面写出
1、下面以定制一个 nginx 镜像(构建好的镜像内会有一个 /usr/share/nginx/html/index.html 文件)
在一个空目录下,新建一个名为 Dockerfile 文件,并在文件内添加以下内容:
FROM nginx
RUN echo '这是我自己的nginx镜像' > /usr/share/nginx/html/index.html
2、FROM 和 RUN 指令的作用
FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。
RUN:用于执行后面跟着的命令行命令。有以下俩种格式:
shell 格式:
RUN <命令行命令> # <命令行命令> 等同于,在终端操作的 shell 命令。
exec 格式:
RUN ["可执行文件", "参数1", "参数2"] # 例如: # RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline
注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:
FROM centos
RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
#以上执行会创建 3 层镜像。可简化为以下格式:
FROM centos
RUN yum install wget \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& tar -xvf redis.tar.gz
如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像。
开始构建镜像
在 Dockerfile 文件的存放目录下,执行构建动作。
以下示例,通过目录下的 Dockerfile 构建一个 nginx:xieqiao(镜像名称:镜像标签)。
$ docker build -t nginx:xieqiao .
后面的 . 不能省,他代表的是上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。
解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。
如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。
注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。
出现 Successfully tagged nginx:xieqiao 就代表创建成功了,使用
docker images
查看是否创建成功
注:本文参考bilibili上面的视频和其他资料手敲笔记,若侵权请联系删除