docker 2024年最新版本常用命令组合

220 阅读4分钟

写在前面

这篇文章是在最近看了docker官方文档之后,通过自己实践操作整理的一篇。对于安装部分,直接跳过,大家可以根据自己的电脑配置去安装。希望对大家有所帮助~~~

查看基本信息

#查看 docker的版本号,包括客户端、服务端等。
docker version 

#查看系统(docker)层面信息,包括images,containers 等。
docker info

# 查看容器/镜像的详细信息
docker inspect [容器/镜像]

#容器和宿主机之间文件复制
docker cp [文件目录 容器ID:内部路径]
docker cp [容器ID:内部路径 文件目录]

镜像操作命令

#查询本地镜像
docker images

#列出所有的images(包含历史)
docker images -a

#查找镜像
docker search [images]

#从docker registry server 中下拉image
docker pull[images:tag]

# 删除一个或多个 image
docker rmi <image lD>

# 构件镜像,注意末尾的.表示:在当前目录使用dockerfile文件构件镜像
docker build -t 镜像名 .
# 给镜像标记标签
docker tag image image_new_name[:版本]

容器操作命令

#查看运行的容器
docker ps
# 查看所有容器,包括未启用的容器
docker ps -a
# 列出最近一次启动的 container
docker ps -l
# 列出最近一次运行的 container lD
docker ps -q

# 运行容器
#-d 后台运行
# --name 给容器起名
# --restart 参数:always始终重启
# 映射 HOST 端口到容器,方便外部访问容器内服务,host_port 可以省略,省略表示把 container_port 映射到一个动态端口。
docker run -itd --name your_name -p <host_port:contain_port> --restart=always 镜像名

# 启动/停止/重启容器
docker start/stop/restart <the-container-id>

# 删除容器
docker rm <the-container-id>

# 强制删除
docker rm -f <the-container-id>

#删除所有已停止的容器
docker container prune
# 删除所有容器
docker rm $(docker ps -aq)
docker rm `docker ps -aq`

# 退出
exit

网络操作

# 创建网络
docker network create network_name
#多个容器共用一个网络
docker network connect network_name container_name1
docker network connect network_name  container_name2
  • 使用dockerfile 一般不会用到这个命令
  • 如果要用到网络的时候,可以先创建网络,然后在运行容器的时候通过--network network_name方式添加到指定网络

持久化

volume

  • create Create a volume
  • inspect Display detailed information on one or more volumes
  • ls List volumes
  • prune Remove unused local volumes
  • rm Remove one or more volumes
#创建volume
docker volume create your_vilume_name
# 启动容器的时候挂载volume
docker run -dp 127.0.0.1:3000:3000 --mount type=volume,src=your_vilume_name,target=container image_name
# 列出所有volume
docker volume ls
#查看指定volume信息
docker volume inspect your_vilume_name

bind:

# 在主机上切换到项目根目录

# 将项目的当前目录以bind的方式挂载到容器的src目录,并启动一个bash shell窗口
 docker run -it --mount type=bind,src="$(pwd)",target=/src ubuntu bash

--mount type=bind 选项告诉 Docker 创建一个绑定挂载

src 是主机上的当前工作目录

target 是该目录应出现在容器中的位置 (/src)

ubuntu bash 在容器文件系统的根目录中启动交互式 bash 会话。

dockerfile常用指令

命令用途
FROM基础镜像文件
RUN构建镜像阶段执行命令
ADD 添加文件,从src目录复制文件到容器的dest,其中 src可以是 Dockerfile所在目录的相对路径,也可以是一个 URL,还可以是一个压缩包
COPY拷贝文件,和ADD命令类似,但不支持URL和压缩包
CMD容器启动后执行命令
EXPOSE声明容器在运行时对外提供的服务端口
WORKDIR指定容器工作路径
ENV指定环境变量
ENTRYPINT容器入口, ENTRYPOINT和 CMD指令的目的一样,都是指定 Docker容器启动时执行的命令,可多次设置,但只有最后一个有效。
USER该指令用于设置启动镜像时的用户或者 UID,写在该指令后的 RUN、 CMD以及 ENTRYPOINT指令都将使用该用户执行命令。
VOLUME指定挂载点,该指令使容器中的一个目录具有持久化存储的功能,该目录可被容器本身使用,也可共享给其他容器。当容器中的应用有持久化数据的需求时可以在 Dockerfile中使用该指令。格式为: VOLUME["/data"]。

compose

  • Docker Compose 是用于定义和运行多容器应用程序的工具
  • 项目根目录创建compose.yaml文件

compose.yaml文件

services:
  # app 容器
  app:
  # 名称将自动成为网络别名
    image: node:18-alpine
    command: sh -c "yarn install && yarn run dev"
    # 容器与主机的端口映射,等价-p 127.0.0.1:3000:3000
    ports:
      - 127.0.0.1:3000:3000
    # 设置工作目录 等价 -w /app
    working_dir: /app
    # 卷映射,等价-v "$(pwd):/app"
    volumes:
      - ./:/app
    # 环境变量
    environment:
      MYSQL_HOST: mysql
      MYSQL_USER: root
      MYSQL_PASSWORD: secret
      MYSQL_DB: todos
  # mysql 容器
  mysql:
    image: mysql:8.0
    volumes:
      - todo-mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: todos
# 使用 Compose 运行时不会自动创建命名卷,需要在顶级 volumes: 部分中定义卷,然后在服务配置中指定挂载点
volumes:
  todo-mysql-data:

compose启动容器

#启动应用程序
 docker compose up -d
 
 #查看日志
docker compose logs -f app

# 停止运行,如果需要删除volumes,可以添加--volumes
docker compose down

Related information:

写在最后

最近看了不少英文的官方文档,慢慢发现,英文文档也没那么难,需要的只是多一点耐心~~~

参考资料

官网:https://docs.docker.com/manuals/