部署--Docker
Docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行。
虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。
而Docker通常用于隔离不同的应用 ,例如前端,后端以及数据库。
# 基本概念
- Docker的工作原理:
镜像(Image)、容器(Container)、仓库(Repository)
- 镜像构建:-- 分层存储
一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。
删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。
镜像是静态的类,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等 。 容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。
容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录;
仓库:把构建后的镜像上传到服务器
每个容器都在自己的命名空间中运行,但使用与所有其他容器完全相同的内核。 发生隔离是因为内核知道分配给进程的命名空间, 并且在API调用期间确保进程只能访问其自己的命名空间中的资源。
- Docker工作流程
+--------+ docker build +-------+ docker run -dt +-------+ docker exec -it +------+
| Dockerfile | ---------> | Image | ---------> | Container | ----------> | Bash |
2
# Dockerfile
一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明
FROM、ENV、RUN、ADD、CMD、EXPOSE(容器对外映射的本地端口)、
// 基础源镜像 docker images -a |grep nginx 查看nginx的版本对应修改
FROM nginx:1.19.8
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ADD default.conf /etc/nginx/conf.d/
ADD dist/ /usr/share/nginx/html
// -R “递归”放开权限! 否则可能出现404
RUN chmod -R 755 /usr/share/nginx/html
// CMD -- 启动容器时指定了运行的命令,则会覆盖掉CMD指定的命令
// daemon off是指nginx服务不运行在后端,即后台进程 守护进程,而是在前台运行
CMD ["nginx", "-g", "daemon off;"]
2
3
4
5
6
7
8
9
10
11
12
13
14
# Docker Compose
https://blog.csdn.net/weixin_47153988/article/details/108739622
实现对Docker容器集群的快速编排,需要多个容器相互配合来完成某项任务的情况,例如一个Web项目,还需要后端的数据库服务容器、负载均衡容器等。 Compose通过docker-compose.yml模板文件来定义一组相关联的应用容器为一个项目
- 使用 Dockerfile 定义应用程序的环境。
- 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
- 最后,执行 docker-compose up 命令来启动并运行整个应用程序。
build dockerfile context 指定Dockerfile文件名构建镜像上下文路径 image 指定镜像 command 执行命令,覆盖默认命令 container name 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale deploy 指定部署和运行服务相关配置,只能在swarm模式适用 environment 添加环境变量 networks 加入网络 ports 暴露容器端口,与-p相同,但端口不能低于60 volumes 挂载宿主机路径或命令卷 restart 重启策略,默认no,always,no-failure,unless-stoped hostname 容器主机名
Docker-Compose标准模板文件应该包含version、services、networks 三大部分
// vim docker-compose.yml
version: '3'
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- 1111:80
- 2222:443
networks:
- web
volumes:
- ./wwwroot:/usr/local/nginx/html
tomcat:
hostname: tomcat
build:
context: ./tomcat
dockerfile: Dockerfile
ports:
- 9527:8080
networks:
- web
volumes:
- ./ROOT:/usr/local/tomcat9/webapps/ROOT
networks:
web:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
docker-compose -f docker-compose.yml up -d '启动docker-compose'
- Docker Compose常用命令
build | 重新构建服务 |
---|---|
ps | 列出容器 |
up | 创建和启动容器 |
exec | 在容器里面执行命令 |
scale | 指定一个服务容器启动数量 |
top | 显示容器进程 |
logs | 查看容器输出 |
down | 删除容器、网络、数据卷和镜像 |
stop/start/restart | 停止/启动/重启服务 |
# 基本命令
- 打镜像
docker build -t hub.dw/library/my-vue-web:v1.0 .
docker images -a |grep my-vue-web
docker push hub.dw/library/my-vue-web:v1.0
// 如果打镜像和部署的服务器不在同一台 或者 yaml文件指定nodeName,并不是打镜像的这台服务器
docker save hub.dw/library/my-vue-web:v1.0 | gzip > my-vue-web:v1.0.tar.gz
scp ./my-vue-web:v1.0.tar.gz apps@10.222.102.3:/home/apps/fuzuxian
docker load -i my-vue-web:v1.0.tar.gz
docker images -a |grep my-vue-web
docker push hub.dw/library/my-vue-web:v1.0
// docker tag hub.dw/library/my-vue-web:v1.0 hub.dw/library/my-vue-web:v1.1
2
3
4
5
6
7
8
9
10
11
12
13
14
容器生命周期管理:run、start/stop/restart、kill、rm、pause/unpause、create、exec
容器操作:ps、inspect、top、attach、events、logs、wait、export、port
容器rootfs命令:commit、cp、diff
镜像仓库:login、pull、push、search
本地镜像管理:images、rmi、tag、build、history、save、load、import
// docker run :创建一个新的容器并运行一个命令
// 以后台模式启动,并将容器命名为mynginx
docker run --name mynginx -d nginx:latest
// -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
// docker commit :从容器创建一个新的镜像。
// 将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息。
docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1
// docker cp :用于容器与主机之间的数据拷贝。
// 将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。
docker cp /www/runoob 96f7f14e99ab:/www/
2
3
4
5
6
7
8
9
10
11
12
参考文章1111 (opens new window) 阮一峰教程docker (opens new window) 参考222 (opens new window) Windows下通过DockerToolbox安装Docker (opens new window) docker hub官网 (opens new window)