Docker 命令

帮助命令

命令 说明
docker version 显示 Docker 版本信息
docker info 显示 Docker 系统信息
docker 命令 --help 查看 Docker 命令帮助

镜像命令

docker images - 查看本地的所有镜像

opens@jiang ~ % docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine/git latest a939554ad0d0 6 weeks ago 25.1MB

解释:

字段 说明
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的 ID
CREATED 镜像的创建时间
SIZE 镜像的大小
可选项:
  • -a, --all:列出所有镜像
  • -q, --quiet:只显示镜像 ID

docker serach - 搜索镜像

opens@jiang ~ % docker search ubuntu #搜索所有Ubuntu镜像
opens@jiang ~ % docker search ubuntu --filter=STARS=3000#搜索收藏数大于3000的版本

docker pull - 下载镜像

格式:docker pull 镜像名[:tag]

opens@jiang ~ % docker pull mysql
Using default tag: latest #不写tag默认latest
latest: Pulling from library/mysql
a076a628af6f: Pull complete #分层下载
f6c208f3f991: Pull complete
88a9455a9165: Pull complete
406c9b8427c6: Pull complete
7c88599c0b25: Pull complete
25b5c6debdaf: Pull complete
43a5816f1617: Pull complete
1a8c919e89bf: Pull complete
9f3cf4bd1a07: Pull complete
80539cea118d: Pull complete
201b3cad54ce: Pull complete
944ba37e1c06: Pull complete
Digest: sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址

#默认tag命令等价
docker pull docker.io/library/mysql:latest

docker rmi - 删除镜像

docker rmi -f 镜像id                 # 删除指定镜像
docker rmi -f 镜像id 镜像id # 删除多个镜像
docker rmi -f $(docker images -aq) # 删除所有镜像

容器命令 - 有了镜像才可以创建容器

docker run - 新建容器并启动

格式:docker run [可选参数] image
可选参数:

参数 说明
--name="Name" 容器名字
-d 后台方式运行
-it 交互方式运行
-p 指定容器的端口
示例:
  1. 交互方式
    opens@jiang ~ % docker run -it centos
    [root@6af5c17049ad /]# ls
    bin etc lib lost+found mnt proc run srv tmp var
    dev home lib64 media opt root sbin sys usr
    [root@6af5c17049ad /]# exit
    exit
  2. 后台模式
    opens@jiang ~ % docker run -d --name centos1 -p 1234:80 centos
    -d #以后台方式运行
    --name centos1 #为新创建的容器取名,如果不指定则默认命名为镜像名,容器名可以重复但是容器id是唯一的,所以容器操作一般都用容器id
    -p 1234:80 #指定端口

docker ps - 列出所有正在运行的容器

docker ps      # 列出当前正在运行的容器
docker ps -a # 列出所有容器(包括已停止的)
docker ps -n=2 # 列出最近创建的 2 个容器

退出容器

  • exit:停止并退出容器
  • Ctrl + P + Q:退出但不停止容器

dokcer rm - 删除容器

docker rm 容器id                 # 删除指定容器(不能删除运行中的)
docker rm -f 容器id # 强制删除容器
docker rm -f $(docker ps -aq) # 删除所有容器

启动和停止容器

docker start 容器id     # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止容器
docker kill 容器id # 强制停止容器

其他常用命令

docker run -d 镜像名 - 后台创建并启动容器

注意:发现启动后自动停止了,这是因为容器想要在后台运行,就必须给他一个前台程序

opens@jiang ~ % docker run -d centos
c4bf43350c76671700936a172587ad636e8efdb326f43ef587bf474346a000c7
opens@jiang ~ % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
opens@jiang ~ %

docker logs - 查看日志

docker logs -tf --tail 10 容器id
# -tf:显示全部日志并带时间戳
# --tail num:显示最后 num 条日志

docker top - 查看容器进程

docker top 容器id

docker inspect - 查看容器元数据

docker inspect 容器id

docker exec/attach - 进入正在运行的容器

docker exec -it 容器id /bin/bash   # 进入新终端
docker attach 容器id # 进入当前终端

docker cp - 从容器拷贝文件到主机

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

docker commit - 生成新镜像

格式:docker commit -m="注释" -a="作者" 容器id 生成的新镜像名:TAG

opens@jiang ~ % docker commit -m="add test file"-a="open" 85dd787c465e testimage:1.0
sha256:3a7bec701e93145d2378e278e605e9c1013120ba17bd404bae47a2a030cb1fc0
opens@jiang ~ % docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
testimage 1.0 3a7bec701e93 7 seconds ago 72.9MB
ubuntu latest f643c72bc252 4 months ago 72.9MB

容器数据卷

为啥需要容器数据卷?

容器是数据隔离的,容器数据卷可以实现主机和容器之间在指定的文件夹里数据同步。删除容器并不会删除主机里的数据

如何使用容器数据卷?

命令行:

docker run -it-v 主机目录:容器目录 镜像 控制台
opens@jiang dockermount % docker run -it-v ~/dockermount:/home ubuntu
# 挂载类型:
# -v /home:匿名挂载
# -v name:/home:具名挂载
# -v /home/dockermount:/home:指定路径挂载
# 权限控制:
# :ro:只读
# :rw:可读可写(默认)

Dockerfile:
Dockerfile是用来构建docker镜像的脚本文件。镜像是一层一层的,脚本每一行对应一层。

FROM ubuntu
VOLUME ["volume01","volume02"]
CMD echo "---end---"
CMD /bin/bash
#使用
docker build -f Dckerfile路径 -t 生成镜像名:tag
# -f 递归生成
# -t tag

数据卷容器

docker run -it --name name02 --volumes-from name01 镜像名
  • 使用 –volumes-from 实现多个容器数据同步
  • 删除父容器不会删除共享数据

Dockerfile

dockerfile是用来构建docker镜像的命令参数脚本文件,构建步骤如下:

  1. 新建 Dockerfile 文件
  2. docker build 构建镜像
  3. docker run 运行镜像
  4. docker push 发布镜像

Dockerfile指令

指令 说明
FROM 基础镜像
MAINTAINER 镜像作者(姓名+邮箱)
RUN 镜像构建时运行的命令
ADD 添加内容(会自动解压)
WORKDIR 镜像的工作目录
VOLUME 挂载的目录
EXPOSE 暴露的端口
CMD 容器启动时运行的命令(只有最后一个生效)
ENTRYPOINT 容器启动时运行的命令(可追加)
ONBUILD 当被继承时运行的指令
ENV 设置环境变量

示例 - 构建一个镜像

  1. 准备构建镜像时需要的文件,所有的文件都放在一个文件夹下,接下来的所有操作也都是在这个文件夹下
    opens@jiang router % ls
    msdk-4.4.7-mips-EL-3.10-u0.9.33-m32t-140827.tar.gz
  2. 编写Dockerfile文件,官方指定文件名,如果使用该名,在构建镜像的时候不需要指定Dockerfile文件,会自动寻找该文件。
    FROM ubuntu:16.04
    MAINTAINER opensjiang<toopens@163.com>

    ADD msdk-4.4.7-mips-EL-3.10-u0.9.33-m32t-140827.tar.gz /usr

    RUN apt-get update \
    && apt-get install -y vim \
    && apt-get install -y lsb-core \
    && apt-get install -y lib3221 lib32ncurses5

    ENV MYPATH /usr/home
    WORKDIR $MYPATH

    ENV MIPS_JOME /usr/msdk-4.4.7-mips-EL-3.10-u0.9.33-m32t-140827
    ENV PATH $PATH:$MIPS_JOME/bin

    EXPOSE 8080
    CMD [ "/bin/bash" ] # CMD 不写的话默认就是这个
  3. 建镜像文件
    opens@jiang router % docker build -t router:compile .
    [+] Building 186.7s (9/9) FINISHE
    由于我用的Dockfile所以不需要指定目录,注意build命令最后面有一个”.”
  4. 查看构建的镜像
    opens@jiang router % docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    router compile a90555201290 3 minutes ago 820MB
  5. 用自己的镜像创建一个容器并挂载volume
    opens@jiang router % docker run -it--name nickname -v /Volumes/OpenWrt:/home
    188ea4832445
    20251105140641