一文看懂Docker
一文看懂Docker
什么是 Docker?
Docker 是一种工具,用于创建、部署和运行应用程序(通过使用容器)。容器使开发人员可以将应用与需要的所有部件(库、框架、依赖项等)打包为一个包一起交付。使用容器可确保此应用的运行与之前相同,而不受任何自定义设置或运行该应用的计算机上先前安装的库的影响(运行应用的计算机可能与用于编写和测试应用代码的计算机不同)。这使开发人员可以专注于编写代码,而无需操心将运行代码的系统。
docker 容器与虚拟机类似,但不会创建整个虚拟操作系统。相反,docker 允许应用使用与运行它的系统相同的 Linux 内核。这使得应用包能够仅要求主计算机上尚未安装的部件,从而降低包大小以及提高性能。
Dockerfile
Dockerfile 是一种文本文件,其中包含用于生成和运行 Docker 镜像的说明:
- 用于创建新镜像的基础镜像或父级镜像
- 用于更新基础操作系统和安装其他软件的命令
- 要包含的生成项目,例如开发的应用程序
- 要公开的服务,例如存储和网络配置
- 要在启动容器时运行的命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 使用 Ubuntu 作为基础镜像
FROM ubuntu:latest
# 运行命令
RUN apt update && apt install -y nginx
# 设置工作目录
WORKDIR /var/www/html
# 复制文件到容器
COPY index.html /var/www/html/index.html
# 暴露端口
EXPOSE 80
# 启动命令
CMD ["nginx", "-g", "daemon off;"]
Docker image
docker 镜像是存储在电脑上的大型文件,可通过 docker CLI 和 docker Desktop 来管理镜像,包括生成、列出、删除和运行镜像。客户端不直接执行命令,它会将所有查询发送到后台的 dockerd 守护程序。
docker 镜像的常用命令如下:
- 生成镜像:
docker build -t my_image .,需要在 Dockerfile 所在目录下运行该命令。-t参数用于命名和标记镜像。 - 创建标签:
docker tag my_image:latest my_image:dev,如果未指定标签,将默认使用 latest 标签。 - 下载镜像:
docker pull image_name:version - 列出镜像:
docker images - 删除镜像:
docker rmi my_image:1.0 - 检查镜像:
docker inspect my_image,用于查看镜像
Docker container
容器好比一个简易的 Linux 操作系统,以host_para:con_para的方式设置参数时,均为主机参数在前,容器参数在后。
- 运行容器:标准语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...];具体示例docker run -it ubuntu:latest bash -c "python /src/main.py";常用的参数包括:-i:以交互模式运行容器,通常与-t同时使用;-t:启动容器后,为容器分配一个终端;-d:后台运行;--name my_name:指定容器名称;-p 8080:80:将容器的 80 端口映射到主机的 8080 端口-v host_dir:container_dir:将容器的目录挂载到主机上-e USER_NAME=Jack:设置环境变量-u root:指定用户,例如指定用户为 root,这里只是指定了 root 用户身份,但不是真正拥有 root 权限–privileged:以 root 权限创建容器,当进入容器之后,拥有 root 权限去执行命令
- 列出运行中的容器:
docker ps,-a查看所有容器(包括已停止的) - 进入运行中的容器:
docker exec -it my_container bash - 停止容器:
docker stop my_container - 删除容器:
docker rm my_container - 重启容器:
docker restart my_container
Docker 数据管理
- 查看容器日志:
docker logs my_container - 查看容器内正在运行的进程:
docker top my_container - 拷贝文件到容器:
docker cp myfile.txt my_container:/home/ - 从容器拷贝文件到本地:
docker cp myfile.txt my_container:/home/
Docker 网络管理
docker 默认有两个网络,host 和 bridge,用户也可以创建自定义的 docker 网络,两个 container 想要通信的话需要位于同一个 docker 网络之中。
- 查看 docker 网络:
docker network ls - 创建自定义网络:
docker network create my_network - 查看特定的网络详情:
docker network inspect my_network - 让容器加入网络:
docker network connect my_network my_container,另一种常见的做法是在运行容器时通过--network=my_network来指定容器要加入的网络 - 将容器移除网络:
docker network disconnect my_network my_container
Docker Compose(多容器管理)
- 启动 Compose 应用:
docker-compose up:启动所有 docker-compose 服务,-d后台运行。 - 停止 Compose 应用:
docker-compose down - 查看 Compose 应用日志:
docker-compose logs
Docker Volume(数据持久化)
当容器被删除后,容器中产生的数据将一并被删除。如果想要保存容器在运行中的数据,就需要将容器挂载到主机上以实现容器目录数据与宿主机数据卷目录数据同步。如果多个容器之间想要实现数据交互,只需将多个容器挂载同一个目录,即可实现多个容器的通信。
- 创建数据卷:
docker volume create my_volume - 查看所有数据卷:
docker volume ls - 删除数据卷:
docker volume rm my_volume - 挂载数据卷:
docker run -d --name my_container -v my_volume:/data ubuntu
This post is licensed under CC BY 4.0 by the author.