自定义镜像
通过自定义镜像,可以根据自己的需求和要求创建一个定制化的容器镜像。
- 创建一个Dockerfile文件,其中包含构建自定义镜像所需的指令和配置。
- 使用Dockerfile中的指令来构建自定义镜像。可以使用
docker build
命令来执行此操作。 - 在构建过程中,可以添加所需的软件、库、配置文件等到自定义镜像中。
- 在构建完成后,可以使用
docker run
命令来创建并运行基于自定义镜像的容器。
通过扩展自定义镜像,您可以满足特定的应用程序需求,添加额外的功能和工具,并确保容器镜像的一致性和可移植性。这为开发人员和运维团队提供了更大的灵活性和控制力。
Dockerfile
指令 | 说明 |
FROM | 指定基础镜像 |
RUN | 在容器中执行命令 |
COPY | 将文件从主机复制到容器中 |
ADD | 将文件或URL从主机复制到容器中 |
WORKDIR | 设置工作目录 |
ENV | 设置环境变量 |
EXPOSE | 暴露容器的端口 |
CMD | 容器启动时执行的命令 |
# 指定基础镜像
FROM ubuntu:latest
# 在容器中执行命令
RUN apt-get update && apt-get install -y \\\\
python3 \\\\
python3-pip
# 将文件从主机复制到容器中
COPY app.py /app/
# 设置工作目录
WORKDIR /app
# 安装依赖
RUN pip3 install -r requirements.txt
# 暴露容器的端口
EXPOSE 5000
# 容器启动时执行的命令
CMD ["python3", "app.py"]
使用该Dockerfile构建镜像的命令为:
docker build -t fsy .
-t
选项用于指定镜像的名称,.
表示Dockerfile所在的目录。
容器互相连接(自定义连接)
1、使用桥接网络(Bridge Network):
默认情况下,Docker创建一个名为’bridge‘的网络,允许在同一主机上运行的容器相互通信。每个容器都会分配一个唯一的IP地址,并且可以使用容器的名称或IP地址进行通信。
2、使用自定义网络: 创建自定义的桥接网络,并在容器创建时将其连接到这个网络。
# 创建一个自定义网络
docker network create mynetwork
# 将容器连接上自定义网络(容器已存在)
docker network connect mynetwork container
# 在网络上运行容器(容器不存在,并且只加入自定义,不存在默认)
docker run -d --name container1 -p **:** --network mynetwork image1
通过第一个命令创建网络
将自定义网络连接上容器,并查看网络添加状况
由下图可以看到容器连接上自定义网络
尝试容器不存在
发现只存在自定义网络,默认网络不存在
实现两个容器之间的互相连接
3、使用链接(Linking): 链接是一种旧的方法,现在不太推荐使用。通过**--link
**选项一个容器访问另一个容器的信息。
# 在网络上运行容器1
docker run --name container1 -d image1
# 在同一网络上运行容器2,并连接到容器1
docker run --name container2 --link container1:image1_alias -d image2
DockerCompose一键部署
docker run -d //docker下容器
--name mysql
-p 3306:3306
-e TZ=Asia/Shanghai
-e MYSQL_ROOT_PASSWORD=123
-v ./mysql/data:/var/lib/mysql
-v ./mysql/conf:/etc/mysql/conf.d
-v ./mysql/init:/docker-entrypoint-initdb.d
--network kab
mysql
version: "3.8" //DockerCompose下
services :
mysql:
image: mysql
container_name: mysql
ports:
- "3306:3306"
enviranment :
Tz: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123
volumes :
- "./mysql/conf:/etc/mysql/conf.d"
- "./mysql/data:/var/lib/mysql"
- "./mysql/init:/docker-entrypoint-initdb.d"
networks :
- kab
(工程项目):
build:
context: .
dockerfile: Dockerfile
container_name: 容器名
ports:
- "8080:8080"
networks:
- kab
depends_on:
mysql(项目依赖)
nginx:
image: nginx
container_name: nginx
ports:
-"18080:18080"
-"18081:18081"
volumes :
- "./nginx/nginx.conf:/etc/nginx/nginx.conf"
-"./nginx/html:/usr/share/nginx/html"
depends_on:
(工程项目)//前端依赖后端
networks :
- kab
network:
kab:
name:(工程项目)