Skip to content

常用的命令

docker 命令手册

对于镜像的所有操作命令,可以使用 docker image --help 查看

docker 命令一图总览

image-20240918171210674

pull 拉取镜像

用法:docker image pull [OPTIONS] NAME[:TAG|@DIGEST]

别名:docker pull

  1. 先去软件市场搜镜像:https://registry.hub.docker.com/
  2. 选择想要下载的镜像 docker pull xxx
  3. 启动镜像 docker run xxx

比如搜索nginx,他有很多版本,在 tags 标签中找到自己所需的版本进行拉取即可

image-20240918161140191

nginx:latest 代表最新的版本

alpine 表示内存比较小的版本,下载镜像的时候尽量使用

bash
docker pull nginx 
# 等于
docker pull nginx:latest

image-20240918161602063

create 创建容器

用法:docker container create [OPTIONS] IMAGE [COMMAND] [ARG...]

别名:docker create

从指定的镜像创建一个新容器,而不启动。

docker create 命令与 docker run 命令共享其大部分 options。

docker run 之前会先执行 create

bash
docker pull redis

docker create redis

images 列出所有镜像

用法:docker image ls [OPTIONS] [REPOSITORY[:TAG]]

别名:docker imgae listdocker images

通过 pull 下载后的镜像,可以使用 images 命令进行查看所有已下载的镜像

bash
docker images

image-20240918161718762

常用的 options

  1. -a,--all 显示所有 images
  2. -q, --quiet 仅显示 images ID

如果想显示所有 images 的 ID,可以使用 -aq

bash
docker images -aq

image-20240918162312697

run 运行容器

用法:docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]

别名:docker run

bash
docker run nginx

这种方法属于前台启动

image-20240918162851192

想要后台启动,可以使用参数 -d,打印容器id,这样可以进行其他操作

image-20240918162953077

docker run -d === docker create + docker start

常用的 options

  1. -d, --detach 在后台运行容器并打印容器ID

  2. -i 以交互模式运行容器,通常与 -t 同时使用

  3. -t 为容器重新分配一个伪输入终端,通常与 -i 同时使用

  4. -e, --env 设置环境变量

  5. --name 指定容器名称

  6. -p, --publish 将容器的端口发布到主机

    将容器的80端口绑定到主机的8080端口

    bash
    docker run -d -p 8080:80 nginx
    # port1:port2
    # port1必须是唯一的

    image-20240918164246361

  7. -P, --publish-all 将所有公开的端口发布到随机端口

  8. -m 设置容器使用内存最大值

  9. --restart 指定重启策略,可以写 --restart=awlays 总是故障重启

  10. -v, --volume(存储) 绑定一个卷。一般格式 主机文件或文件夹:虚拟机文件或文件夹

  11. --net(网络) 指定容器的网络连接类型,支持 bridge/host/none/container 四种类型

实践中比较常见的案例

nginx

bash
# 注意 外部的/nginx/conf下面的内容必须存在,否则挂载会覆盖
docker run --name nginx-app \
-v /app/nginx/html:/usr/share/nginx/html:ro \
-v /app/nginx/conf:/etc/nginx
-d nginx

mysql

bash
# 5.7版本
docker run -p 3306:3306 --name mysql57-app \
-v /app/mysql/log:/var/log/mysql \
-v /app/mysql/data:/var/lib/mysql \
-v /app/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

# 8.x版本,引入了 secure-file-priv 机制,磁盘挂载将没有权限读写data数据,所以需要将权限透传,
# 或者chmod -R 777 /app/mysql/data
# --privileged 特权容器,容器内使用真正的root用户
docker run -p 3306:3306 --name mysql8-app \
-v /app/mysql/conf:/etc/mysql/conf.d \
-v /app/mysql/log:/var/log/mysql \
-v /app/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--privileged \
-d mysql

redis

bash
# 提前准备好redis.conf文件,创建好相应的文件夹。如:
port 6379
appendonly yes
#更多配置参照 https://raw.githubusercontent.com/redis/redis/6.0/redis.conf
docker run -p 6379:6379 --name redis \
-v /app/redis/redis.conf:/etc/redis/redis.conf \
-v /app/redis/data:/data \
-d redis:6.2.1-alpine3.13 \
redis-server /etc/redis/redis.conf --appendonly yes

--restart 重启策略

  • no,默认策略,在容器退出时不重启容器
  • on-failure,在容器非正常退出时(退出状态非0),才会重启容器
  • on-failure:3,在容器非正常退出时重启容器,最多重启3次
  • always,在容器退出时总是重启容器
  • unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

kill 和 stop 停止容器

kill 是强制杀死(直接拔电源)

stop 可以允许优雅停机(当前正在运行中的程序处理完所有事情后再停止)

exec 进入容器

用法:docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]

别名:docker exec

bash
# 拉取镜像
docker pull alpine
# 运行容器
docker run --name myAlpine -d -i -t alpine /bin/sh
# 进入容器
docker exec -it myAlpine sh

image-20240918170058107

出了 exec 可以进入容器,attach 也可以进入容器,它绑定的是控制台,可能导致容器停止(不要用这个)

ps 列出所有容器

用法:docker container ls [OPTIONS]

别名:docker container listdocker container psdocker ps

常用的 options

  1. -a, --all 显示所有容器
  2. -f, --filter 过滤条件
  3. -q, --quiet 仅显示容器ID
  4. -s, --size 显示总文件大小
bash
docker ps -a

image-20240918170917023

bash
docker ps

image-20240918170955981

commit 提交容器成镜像

用法:docker container commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

别名:docker commit

一般运行中的容器会常年修改,我们要使用最终的新镜像,就可以将镜像进行 commit

bash
docker commit -a fan -m "first commit" mynginx mynginx:v4

options

  1. -a, --author 作者
  2. -m, --message 提交信息
  3. -p, --pause 提交期间暂停容器(默认值为 true)

Released under the MIT License.