docker使用教程及命令使用方式


xiaoxiaosun
小小孙 发布于 2025-06-08 / 17 阅读 / 0 评论 /

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 



是否对你有帮助?

评论