写在前面
这篇文章是在最近看了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
createCreate a volumeinspectDisplay detailed information on one or more volumeslsList volumespruneRemove 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/