自定义镜像

通过自定义镜像,可以根据自己的需求和要求创建一个定制化的容器镜像。

  1. 创建一个Dockerfile文件,其中包含构建自定义镜像所需的指令和配置。
  2. 使用Dockerfile中的指令来构建自定义镜像。可以使用docker build命令来执行此操作。
  3. 在构建过程中,可以添加所需的软件、库、配置文件等到自定义镜像中。
  4. 在构建完成后,可以使用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

通过第一个命令创建网络

离线docker如何构建镜像 docker离线部署镜像_运维

将自定义网络连接上容器,并查看网络添加状况

离线docker如何构建镜像 docker离线部署镜像_docker_02

由下图可以看到容器连接上自定义网络

离线docker如何构建镜像 docker离线部署镜像_docker_03

尝试容器不存在

离线docker如何构建镜像 docker离线部署镜像_运维_04

发现只存在自定义网络,默认网络不存在

实现两个容器之间的互相连接

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:(工程项目)