docker一文搞懂自动化部署

221 阅读6分钟

Docker一文搞懂

[toc]

快速持续集成 弹性伸缩 节省机器资源 容器化

自动化部署软件的方式

什么是docker

理解docker

走进docker

运行hello world

nginx

docker化的java web

1 什么是Docker

1.1docker历史

2013开源

2014.6 v1.0

目前v1.13,托管在GitHub,跨平台

2 理解

装应用的容器,可以把程序放到docker里

1 集装箱

2 标准化 运输方式,存储方式 API接口标准化

3 隔离

解决运行环境不一致的问题(我本地没问题啊) 操作系统 jdk 配置 打包

杀掉死循环服务,

每条服务器执行命令 快速扩展 弹性伸缩变得简单 10台变100台服务器

3 走进docker

3.1运行过程

build 构建镜像

ship :运输镜像 从仓库和主机运输

run:运行

DOCEKER:运行过程:去仓库把镜像拉到本地 ,用命令把镜像运行,变成容器

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzMjU2Njg4,size_16,color_FFFFFF,t_70.png

3.2 镜像(Image)

目的:希望在其他环境运行

不同目录挂到同一个文件

联合文件系统: 实现文件分层 实现镜像存储

image-20211209103257124.png

镜像存储格式

每层文件系统都只读的

这些文件会被看成同一个目录 相当于一个文件系统引导

应用代码 tomcat jdk 底层是操作系统引导 操作系统 底层软件

image-20211209103733770.png

3.3 容器(Contains)

容器只有上面一层是可写可读的,其余都是可读的

写镜像文件也可能

写这个文件之前 会把这个文件拷到容器最上层,再修改,

应用读一个文件的时候 从顶层开始查找 ,如果没有再往下读取

同一个镜像可以生成多个容器独立运行

3.4 docker仓库(Repository)

把镜像传到docker仓库,再从目的地拉取

docker自己提供

docker仓库: hub.docker.com

c.163.com/index.html

4 安装docker

www.docker.com/products/do…

实践

报错:

image-20211209225959381.png

解决: 启用或关闭windows功能 开启hype-v 虚拟

restart wsl版本低 需要更新 ,此外windows版本需要适配 可以查看这个图片中的链接

网上其他回答:www.cnblogs.com/h-z-y/p/144… 还没来得及试 上面就解决了

配置源

image-20211209233029419.png

image-20211210100346632.png

5 命令

docker pull name

docker images

参考博客: blog.csdn.net/qq_39611230…

菜鸟教程命令连接: www.runoob.com/docker/dock…

docker run image

1 cmd打开命令行

docker --version

2 拉取镜像

docker pull ubuntu  //官方镜像
docker pull hub.c.163.com/library/mysql:latest //第三方库名

​ 库名

image-20211210095703668.png

3 查看镜像

docker image ls 
docker images
docker image rm hello-world

4 运行镜像 创建一个新的容器并运行一个命令,从hub下载镜像

docker run hello-world     //前台运行
docker run hub.c.163.com/library/nginx   //前台运行
docker stop  hub.c.163.com/library/nginx  //停止 另起一个窗口 ctrl+C 无效呢
docker run -d  hub.c.163.com/library/nginx // 后台运行

image-20211210100827874.png 5 查看容器

docker ps    // 正在运行的容器
docker ps -a //全部容器

6 删除容器 删除镜像 注意 先删除容器 再删除镜像 否则无法删除镜像 会报错

Error response from daemon: conflict: unable to delete 2dc68ff797db (must be forced) - image is being used by stopped container fa41f1b98a84

解决:

docker rm fa41f1b98a84   //删除容器
docker rmi 2dc68ff797db   //删除镜像

7 启动关闭容器

docker ( container ) start xxx
docker ( container ) stop xxx
docker ( container ) kill xxx //强制关闭

8 进入容器

docker ps 查看容器 选择id进入
docker exec -it 61f2d252a566  bash

image-20211210101427947.png

9容器制作成镜像

docker commit containsName imageName

镜像打包备份

docker save -o fileName imageName

镜像解压

docker load -i filePath

6 docker 运行Nginx

nginx 持久运行的容器

前台挂起 后台运行

前台ctrl+C前台运行

进入容器内部

网易云镜像中心 c.163.com/hub#/m/home… 账号liuzy111 邮箱qq

image-20211210092334160.png 命令如上所示

7 docker网络

容器端口可以在容器所在主机运行---端口映射

开放容器端口到主机

网路类型

1 桥接

2 使用主机 ip

3 没网络

端口映射

查看开放端口

查看开放端口:netstat -na|findstr 8080

在cmd环境下,所以要用findstr

主机端口8080,通过网卡来到docker0的网桥,会对端口映射, 映射到容器的80

网桥把请求转发到容器的80 端口,并且把响应返回

-p

8080是主机端口 80是容器端口

docker run -d -p 8080:80 hub.c.163.com/library/nginx

-P

所有监听端口都和主机做映射

开放所有端口映射到一个随机端口

image-20211210104801323.png 记得docker stop 容器

8 java web应用

1 制作自己的镜像 build

java web运行在tomcat里面 但是运行springboot呢

Dockerfile

docker build

Jpress War包 :www.jpress.io/downloadimage-20211210134547008转存失败,建议直接上传图片文件

163下载tomcat

包括jdk

Dockerfile

1 ADD指令的功能是将主机构建环境(上下文)目录中的文件和目录、以及一个URL标记的文件 拷贝到镜像中。

其格式是: ADD 源路径 目标路径

2

/bin/bash 进入交互模式
tag 版本 imagename 起名
容器开启关闭后数据不删除
数据持久化问题
linux数据挂载 逻辑上独立
卷:volumn挂载磁盘  重新拉去镜像会把这块自动插上
mysql数据重启删除

nginx 前后端分离 想访问后端接口
前端npm打包命令 放在html文件夹里面 conf配置文件
location / 默认访问

不同服务器      js触发跨域 部署+代替执行请求
用自己写的conf文件覆盖 nginx.conf
nginx映射前缀 映射mdop,不是全路径 后端有规范
tomcat不能代理 nginx可以
  1. 打成jar包 ,添加Dockerfile文件,pom.xml同级别目录

    FROM java:8
    EXPOSE 8080
    ARG JAR_FILE
    ADD target/${JAR_FILE} /application.jar
    ENTRYPOINT ["java", "-jar","/application.jar"]
    #第一行的FROM命令,指定了我们这个镜像基于openjdk这个镜像制作。
    #
    #ADD,把本地目录下target文件夹里打好的jar文件添加到容器里,重命名为app.jar.
    # ENTRYPOINT 镜像运行的起始点
    

    用这种绝对路径:

    FROM java:8
    EXPOSE 8080
    ADD target/application.jar /application.jar
    ENTRYPOINT ["java", "-jar","/application.jar"]
    
  2. cmd切换到此目录

  3. docker build -t imageName:latest .

  4. docker run -d -p 8081:80 application

2 运行自己的容器 run

DockerHub 搜

检测底层镜像

镜像分层

底层有 检测到不用下载

dockerfile文件:

run 这里差8小时 run事件纠正

不然日志事件也是错的

entrypoint

前端打包:

npm run install

dockerfile

在dockerfile文件夹下面cmd运行

FROM nginx:1.18.0
COPY build/ /etc/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf

copy 源文件地址 目标地址

dockerfile文件不能向上访问 需要把build放到config里面

COPY build/ /etc/nginx/html

把build文件夹全部复制到 linux文件夹下面的html文件里面