部署--Docker

12/15/2020 Docker

Docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行。

虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。

Docker通常用于隔离不同的应用 ,例如前端,后端以及数据库。

# 基本概念

  • Docker的工作原理:

镜像(Image)、容器(Container)、仓库(Repository)

  • 镜像构建:-- 分层存储

一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。

删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。

  • 镜像是静态的类,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等 。 容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。

    容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录;

  • 仓库:把构建后的镜像上传到服务器

每个容器都在自己的命名空间中运行,但使用与所有其他容器完全相同的内核。 发生隔离是因为内核知道分配给进程的命名空间, 并且在API调用期间确保进程只能访问其自己的命名空间中的资源。

  • Docker工作流程
+--------+ docker build +-------+ docker run -dt +-------+ docker exec -it +------+
| Dockerfile | ---------> | Image | ---------> | Container | ----------> | Bash |
1
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;"]
1
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:
1
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
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/
1
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)