docker命令大全
帮助命令
docker version #查看docker的版本信息
docker info #查看docker的系统信息,包括镜像和容器的数量
docker 命令 --help #帮助命令(可查看可选的参数)
docker COMMAND --help
命令的帮助文档地址:https://docs.docker.com/engine/reference/commandline/docker/
--------------------------------------------------------------------------------------------------
镜像命令
1.docker images 查看本地主机的所有镜像
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 11 months ago 13.3kB
解释:
1.REPOSITORY 镜像的仓库源
2.TAG 镜像的标签
3.IMAGE ID 镜像的id
4.CREATED 镜像的创建时间
5.SIZE 镜像的大小
# 可选参数
-a/--all 列出所有镜像
-q/--quiet 只显示镜像的id
--------------------------------------------------------------------------------------------------
2.docker search 搜索镜像
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysql
#可选参数
Options:
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print search using a Go template
--limit int Max number of search results (default 25)
--no-trunc Don't truncate output
#搜索收藏数大于3000的镜像
docker search mysql --filter=STARS=3000 收藏数:STARS
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysql --filter=STARS=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10308 [OK]
mariadb MariaDB is a community-developed fordockerk of MyS… 3819 [OK]
-----------------------------------------------------------------------------------------------------
3.docker pull 命令使用(下载镜像)
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysql
Using default tag: latest #如果不写tag默认就是latest
latest: Pulling from library/mysql
6ec7b7d162b2: Pull complete #分层下载,docker image的核心-联合文件系统
fedd960d3481: Pull complete
7ab947313861: Pull complete
64f92f19e638: Pull complete
3e80b17bff96: Pull complete
014e976799f9: Pull complete
59ae84fee1b3: Pull complete
ffe10de703ea: Pull complete
657af6d90c83: Pull complete
98bfb480322c: Pull complete
6aa3859c4789: Pull complete
1ed875d851ef: Pull complete
Digest: sha256:78800e6d3f1b230e35275145e657b82c3fb02a27b2d8e76aac2f5e90c1c30873 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #下载来源的真实地址 #docker pull mysql等价于docker pull docker.io/library/mysql:latest
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
6ec7b7d162b2: Already exists
fedd960d3481: Already exists
7ab947313861: Already exists
64f92f19e638: Already exists
3e80b17bff96: Already exists
014e976799f9: Already exists
59ae84fee1b3: Already exists
7d1da2a18e2e: Pull complete
301a28b700b9: Pull complete
529dc8dbeaf3: Pull complete
bc9d021dc13f: Pull complete
Digest: sha256:c3a567d3e3ad8b05dfce401ed08f0f6bf3f3b64cc17694979d5f2e5d78e10173
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
----------------------------------------------------------------------------------------------
4.docker rmi 删除镜像
#1.删除指定的镜像id
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f 镜像id
#2.删除多个镜像id
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f 镜像id 镜像id 镜像id
#3.删除全部的镜像id
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f $(docker images -aq)
----------------------------------------------------------------------------------------------
容器命令
docker pull centos
docker run [可选参数] image
#参数说明
--name="名字" 指定容器名字
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口
-p ip:主机端口:容器端口 配置主机端口映射到容器端口
-p 主机端口:容器端口
-p 容器端口
)
-P 随机指定端口(大写的P)
#docker ps
# 列出当前正在运行的容器
-a # 列出所有容器的运行记录
-n=? # 显示最近创建的n个容器
-q # 只显示容器的编号
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bca129320bb5 centos "/bin/bash" 4 minutes ago Exited (0) 3 minutes ago optimistic_shtern
bd1b8900c547 centos "/bin/bash" 6 minutes ago Exited (0) 5 minutes ago cool_tesla
cf6adbf1b506 bf756fb1ae65 "/hello" 5 hours ago Exited (0) 5 hours ago optimistic_darwin
退出容器
crtl+p+q //后台运行
exit //直接容器停止并退出
docker rm 容器id #删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -f
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 镜像名 //会产生问题
常用:
日志的查看
docker logs -tf 容器id
docker logs --tail number 容器id #num为要显示的日志条数
查看容器中进程信息
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker top c703b5b1911f
UID PID PPID C STIME TTY TIME CMD
root 11156 11135 0 11:31 ? 00:00:00 /bin/sh -c while true;do echo hi;sleep 5;done
root 11886 11156 0 11:43 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5
---------------------------------------------------------------------------------------------------
查看容器的元数据 docker inspect
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker inspect 容器id
---------------------------------------------------------------------------------------------------
进入当前正在运行的容器 docker exec
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it c703b5b1911f /bin/bash
[root@c703b5b1911f /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@c703b5b1911f /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 03:31 ? 00:00:00 /bin/sh -c while true;do echo hi;sleep 5;done
root 279 0 0 03:54 pts/0 00:00:00 /bin/bash
root 315 1 0 03:56 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5
root 316 279 0 03:56 pts/0 00:00:00 ps -ef
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker attach c703b5b1911f
docker exec 进入容器后开启一个新的终端,可以在里面操作
docker attach 进入容器正在执行的终端,不会启动新的进程
---------------------------------------------------------------------------------------------------
拷贝操作的命令如下 docker cp
#拷贝容器的文件到主机中
docker cp 容器id:容器内路径 目的主机路径
#拷贝宿主机的文件到容器中
docker cp 目的主机路径 容器id:容器内路径
------------------------------------------------------------------------------------------------------
提交镜像
docker commit镜像
使用docker commit 命令提交容器成为一个新的版本
docker commit -m=“提交的描述信息” -a="作者" 容器id 目标镜像名:[TAG]
****---------------------------------------------------------------------------------------------------
容器数据卷
docker run -it -v 主机目录:容器内目录
具体和匿名挂载
匿名挂载
-v 容器路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
docker volume ls \\查看所有volume的情况
[root@docker ~]# docker volume ls
DRIVER VOLUME NAME
local 3d1a21ba4f1dfbce8f0e43ddfe71f97c2139f9027129827c66e7456fa2687e9d
local 24584c6abcf36ed68c78bab449bea82b201935cf2f10ff89a360525aa6aa0e8f
local eef08953bc1ace2e79a13dc132439a00f8305827bf286a68a515ca899c61cefe
[root@docker ~]#
这里发现,这种就是匿名挂载,我们在 -v 只写了容器内的路径,没有写容器外的路径!
具名挂载
docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx nginx
[root@docker ~]# docker volume ls
DRIVER VOLUME NAME
local 3d1a21ba4f1dfbce8f0e43ddfe71f97c2139f9027129827c66e7456fa2687e9d
local 24584c6abcf36ed68c78bab449bea82b201935cf2f10ff89a360525aa6aa0e8f
local eef08953bc1ace2e79a13dc132439a00f8305827bf286a68a515ca899c61cefe
local juming-nginx
[root@docker ~]# docker volume inspect juming-nginx
[
{
"CreatedAt": "2022-06-25T13:40:43+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
"Name": "juming-nginx",
"Options": null,
"Scope": "local"
}
]
所有的docker容器内的卷,没有指定目录的情况下,都是在: /var/lib/docker/volumes/xxx/_data
如何确定是具名挂载还是匿名挂载,还是指定路径挂载
v 容器内路径 **匿名挂载
-v 卷名:容器内路径 **具名挂载
-v /宿主机路径:容器内路径 **指定路径挂载!
------------------------------------dockerfile------------------------------------------------------------------
Dockerfile
# 文件中的内容 指令(大写) 参数
#镜像是一层一层的,这里的每个命令,就是镜像的一层!
FROM centos # 指定镜像
VOLUME ["volume01","volume02"] # 挂载目录
CMD echo "----end----" # CMD 执行命令行命令
CMD /bin/bash
执行Dockerfile脚本文件,构建镜像
docker build -f dockerfile01 -t kuangshen/centos .
命令 docker build -f 文件路径 -t 镜像名:[tag] .
容器数据卷:
[root@docker ~]# docker run -it --name docker02 --volumes-from docker01 stl/centos
27b67c volume01]# ls
docker01
--volumes-from //通过这个命令 就可以进行容器的数据卷共享
-------------------------------------********************************------------------------------------------
15.1 DockerFile构建过程
DockerFile脚本文件语法
1、每个保留关键字(指令)都是必须是大写字母
2、执行从上到下顺序
3、#表示注释
4、每一个指令都会创建提交一个新的镜像曾,并提交!
DockerFile的指令
指令 解释 小写
FROM 基础镜像,一切从这里开始构建 from
MAINTAINER 镜像是谁写的, 姓名+邮箱(翻译:维护人员) maintainer
RUN 镜像构建的时候需要运行的命令 run
ADD 步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录 add
WORKDIR 镜像的工作目录 workdir
VOLUME 挂载的目录 volume
EXPOSE 保留端口配置(开放的端口) expose
CMD 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。 cmd
ENTRYPOINT 指定这个容器启动的时候要运行的命令,可以追加命令(入口点) entrypoint
ONBUILD 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令,触发指令。 onbuild
COPY 类似ADD,将我们文件拷贝到镜像中 copy
ENV 构建的时候设置环境变量! env
实战:
FROM centos
MAINTAINER root<id_07221888@qq.com>
ENV MYPATH /usr/local # 设置环境变量
WORKDIR $MYPATH # 镜像的工作目录,进入镜像的初始目录
# RUN: 镜像构建的时候需要运行的命令
RUN yum -y install vim # 新增 vim 工具
RUN yum -y install net-tools # 新增 网络 工具 有ifconfig命令
EXPOSE 80 # 开放的端口
CMD echo $MYPATH # CMD:容器启动的时候要运行的命令
CMD echo "-----end----"
CMD /bin/bash
# 命令 docker build -f 文件路径 -t 镜像名:[tag] .
docker build -f /home/dockerfile/centos-dockerfile -t mycentos:0.1 .
FROM centos:7
MAINTAINER stl<1027228179@.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u60-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.64.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_60
ENV CLASSPATHJAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.64
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.64
ENV PATHJAVA_HOME/bin:$CATALINA_HOME/lib
EXPOSE 9090
CMD /usr/local/apache-tomcat-9.0.64/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.64/logs/catalina.out
docker run -d -p 9090:8080 --name tomcat01 -v /home/stl-tomcat/tomcat/test:/usr/local/apache-tomcat-9.0.64/webapps/test -v /home/stl-tomcat/tomcat/logs:/usr/local/apache-tomcat-9.0.64/logs diytomcat
---------------------------------*****************************************************------------
将docker build 的镜像发布
docker login -u 【你的用户名】 -p 【你的密码】
# docker tag 镜像id 你的账户名/镜像仓库名:tag名
docker tag 3a12f3d5b2a5 dockerywl/cmd-test:0.1
阿里云镜像发布
$ docker login --username=stl189158 registry.cn-chengdu.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在访问凭证页面修改凭证密码。
2. 从Registry中拉取镜像
$ docker pull registry.cn-chengdu.aliyuncs.com/stl-rongqi/stlnb:[镜像版本号]
3. 将镜像推送到Registry
$ docker login --username=stl189158 registry.cn-chengdu.aliyuncs.com
$ docker tag [ImageId] registry.cn-chengdu.aliyuncs.com/stl-rongqi/stlnb:[镜像版本号]
$ docker push registry.cn-chengdu.aliyuncs.com/stl-rongqi/stlnb:[镜像版本号]
-------------------------------------------------------------------------------------------------
Docker网络
网络自定义
[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
b17ae99a6b05 bridge bridge local //桥接网络
a10705327a68 host host local //和宿主机共享网络
f8d17b94bb3e none null local //不配置网络
[root@docker ~]# docker run -d -P --name tomcat01 --network bridge tomcat //默认网络 --network bridge 就是我们的docker0
docker0特点:默认,域名不能访问 --link可以打通
[root@docker ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
3d1b81d5c6c707621dae3fb2d1ef86fe0b6ffaefe1d376f4fa32b86a77fbf100
--driver bridge
--subnet
--gateway
假如我们需要容器之间互通,就要用connect
[root@docker ~]# docker network connect mynet centos03