Docker使用攻略
基本概念
Docker 是一种容器虚拟化技术,它可以将应用程序及其依赖项打包到一个可移植的容器中,并运行在任何支持 Docker 的环境中。
- 镜像:镜像(image)是 Docker 创建的模板,包含了运行容器所需的所有内容,如操作系统、应用程序、依赖项和配置文件。
- 容器:容器(container)是镜像(image)的运行实例,容器是可移植的、自包含的、可重复的运行环境。
- 仓库:仓库(repository)是存放镜像的仓库,可以是本地的,也可以是远程的。
Docker 安装
进入网站https://get.docker.com/,按照要求执行第一步和第四步
curl -fsSL https://get.docker.com -o get-docker.sh
sudo bash get-docker.sh
- 所有的docker命令都需要sudo权限
- 如果请求失败,可以尝试以下的方式
curl -fsSL https://raw.githubusercontent.com/docker/docker-install/master/install.sh -o get-docker.sh
Docker 镜像加速
镜像加速器可以加速 Docker 镜像的下载,从而提高镜像的拉取速度。
sudo vim /etc/docker/daemon.json
输入下述内容:
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.xuanyuan.me",
"https://docker.1ms.run"
]
}
保存并退出文件,然后重启 Docker 服务:
sudo service docker restart
Docker 常用命令
镜像
下载镜像
sudo doccker pull <image_name>
- 可以前往https://hub.docker.com/查找更多镜像。
- 对于特定平台架构的镜像,需要加入参数
--platform,示例:sudo docker pull --platform linux/amd64 <image_name>
列出所有镜像
sudo docker images
删除镜像
sudo docker rmi <image_name> or <image_id>
容器
启动容器
sudo docker run -d <image_name>
-d后台运行-p<host_port>:<container_port>映射端口-v <host_path>:<container_path>挂载卷,映射目录;这样可以保证容器被删除的时候,对应的数据不会丢失,做持久化保存;主机和容器之前的修改会同步 我们也可以生成一个挂载卷,并挂载到容器中,sudo docker volume create <volume_name>
sudo docker run -d -v <volume_name>:<container_path> <image_name>
sudo docker volume inspect <volume_name> # 查看卷信息
sudo docker volume list # 查看所有卷
sudo docker volume rm <volume_name> # 删除卷-e <env_name>=<env_value>设置环境变量--name <container_name>设置容器名称,名称不能重复-it交互式运行,表示启动一个交互式终端--rm停止容器时,会自动删除容器;一般和-it一起使用,用于临时运行一个容器--restart <policy>设置容器重启策略,always:总是重启;unless-stopped:除非手动停止,否则一直重启--network <network_name>把容器加入到这个子网中
查看进程状态
sudo docker ps -a
-a显示所有容器,包括停止的容器
创建容器
sudo docker create 《image_name>
停止容器
sudo docker stop <container_id> or <container_name>
启动容器
sudo docker start <container_id> or <container_name>
删除容器
sudo docker rm <container_id> or <container_name>
-f强制删除,对于正在运行的容器,需要加上此参数
运行命令
sudo docker exec <container_id> or <container_name> <command>
例如进入容器中运行命令
sudo docker exec -it <container_id> or <container_name> bash
查看容器信息
sudo docker inspect <container_id> or <container_name>
查看容器日志
sudo docker logs <container_id> or <container_name> -f
-f跟随日志,实时查看日志
Dockerfile
Dockerfile 是 Docker 镜像的构建文件,它定义了镜像的构建步骤,包括安装软件、设置环境变量、复制文件、运行命令等。
Dockerfile 语法
FROM <base_image>
WORKDIR <working_directory>
COPY <source> <destination>
RUN <command>
EXPOSE <port>
CMD ["command"]
制作镜像
- 创建 Dockerfile 文件
- 运行命令,
<tag>为镜像的版本号,可以省略sudo docker build -t <image_name>:<tag> . - 如果需要推送镜像到仓库,需要先登录仓库
sudo docker login
sudo docker build -t <username>/<image_name>:<tag> .
sudo docker push <user_name>/<image_name>:<tag>
Docker 网络
bridge 模式(桥接)
Docker 默认使用 bridge 网络模式,即每个容器都有自己的网络接口,并分配一个 IP 地址,一般为172.17.0.x。在容器之间可以通过 IP 地址进行通信,但容器和主机之间的网络是隔离的,无法进行通信。
我们可以使用docker network create命令创建一个自定义的网络,并把容器加入到这个网络中。一个子网络可以有多个容器,容器之间可以通过 IP 地址或者容器名称(容器内部的DNS机制)进行通信;不同的子网络之间无法进行通信。
sudo docker network create <network_name>
sudo docker run -d -p 80:80 --network <network_name> <image_name>
host 模式
host 模式将容器的网络与主机的网络进行绑定,容器和主机的网络是共享的,不需要使用-p进行端口映射。
none 模式
none 模式将容器的网络关闭,容器将无法访问网络,只能通过容器内部进行通信。
常用命令
sudo docker network create <network_name> # 创建网络
sudo docker network list # 列出所有网络
sudo docker network rm <network_name> or <network_id> # 删除网络
Docker Compose
Docker Compose 是一个用于定义和运行多个 Docker 容器的开源工具。它可以将多个容器组合成一个应用,并使用docker-compose.yml文件进行配置。
下面是一个简单的docker-compose.yml文件,用于定义一个包含两个容器的 Docker 应用:
services:
frontend:
image: <image_name>
ports:
- "8080:8080"
environment:
- "ADMIN_USER=admin"
- "ADMIN_PASSWORD=password"
depends_on:
- "backend"
backend:
image: <image_name>
environment:
- "DB_HOST=db"
- "DB_PORT=3306"
volumes:
- "./data:/data"
一个compose文件里面的容器会自动加入一个子网
最后运行命令,启动compose文件
sudo docker-compose up -d # 启动
sudo docker-compose down # 停止并删除所有容器
sudo docker-compose stop # 停止容器
sudo docker-compose start # 启动容器
sudo docker-compose logs -f # 查看日志