Docker

作者: 古巷挂青灯 | 来源:发表于2021-04-13 12:55 被阅读0次

    一.为什么使用容器?

    1.上线流程繁琐
    开发->测试->申请资源->审批->部署->测试等环节
    2.资源利用率低
    普遍服务器利用率低,造成过多浪费
    3.扩容/缩容不及时
    业务高峰扩容流程繁琐,上线不及时
    已知情况,例如618,双11
    未知情况,业务机器增加承载量,可以应对一些突发,一般预留30%的配置
    -弹性伸缩
    4.服务器环境臃肿
    服务器越来越臃肿,对维护,迁移带来困难
    5.环境不一致性

    image.png

    进一步对比


    image.png
    虚拟机:
    1.提升服务器资源利用率
    2.提供一个完全隔离的环境
    容器:
    1.容器提供一个基本的独立环境,实现容器隔离,资源限制
    2.主要解决应用层问题,应用快速部署,高效管理
    

    三.Docker是什么

    1.使用最广泛的开源容器引擎
    2.一种操作系统级的虚拟话技术
    3.依赖于Linux内核特性:Namespace(资源隔离)和Cgroups(资源限制)
    4.一个简单的应用程序打包工具
    

    设计目标

    1.提供简单的应用程序打包
    2.开发人员和运维人员职责逻辑分离
    3.多环境保持一致性
    

    (设计来源集装箱)


    image.png

    运行起来,互不影响


    image.png

    开发人员:

    1.开发项目
    2.打包项目环境+代码成镜像
    3.部署到容器平台
    

    运维人员:怎么高效的去管理这些容器
    好处:

    1.运维人员节省人工成本
    2.持续发布有问题更快解决
    

    Docker应用场景

    1.应用程序打包和发布
    2.应用程序隔离
    3.持续集成
    4.部署微服务
    5.快速搭建测试环境
    6.提供PasS产品(平台即服务)
    

    3.Docker基本组成

    Docker Client:Linux命令行执行的客户端命令,Docker命令
    Host:Docker主机
    Docker Registry:Docker镜像
    
    image.png

    4.版本与支持平台

    Docker版本:

    1.社区版(Community Edition,CE)
    2.企业版(Enterprise Edition,EE)
    

    支持平台:

    1.Linux(CentOS,Debian,Fedora,Oracle Linux,RHEL,SUSE和Ubuntu)
    2.Mac
    3.Windows
    

    官方文档:

    https://docs.docker.com/engine/install/centos/
    

    四.Docker安装
    第一步:安装前建议关闭selinux和firewalld NetworkManager

    #关闭firewalld 和NetworkManager
    [root@D ~]#systemctl stop firewalld NetworkManager
    [root@D ~]#systemctl disable firewalld NetworkManager
    

    检查是否正在运行

    systemctl is-active firewalld NetworkManager
    

    检查是否开机自启动

    systemctl is-enabled firewalld NetworkManager
    [root@D ~]# systemctl is-active firewalld NetworkManager crond
    unknown
    inactive
    active
    [root@D ~]# systemctl is-enabled firewalld NetworkManager crond
    disabled
    disabled
    enabled
    

    关闭selinux

    cat /etc/selinux/config
    [root@D ~]# grep =disable /etc/selinux/config
    SELINUX=disabled
    [root@D ~]# setenforce 0
    [root@D ~]# getenforce
    Permissive
    安装docker
    

    第二步:安装好系统,卸载系统内老的docker版本

    [root@docker ~]# yum remove docker \ 
                         docker-client \ 
                         docker-client-latest \ 
                         docker-common \ 
                         docker-latest \ 
                         docker-latest-logrotate \ 
                         docker-logrotate \ 
                         docker-engine
    

    第三步:安装依赖包

    默认没有docker源
    [root@docker01 ~]# cd /etc/yum.repos.d/
    [root@docker01 /etc/yum.repos.d]# ls
    CentOS-Base.repo CentOS-Sources.repo
    CentOS-CR.repo CentOS-Vault.repo
    CentOS-Debuginfo.repo CentOS-x86_64-kernel.repo
    CentOS-fasttrack.repo epel.repo
    CentOS-Media.repo
    为其配置一个稳定的docker源
    [root@docker01 ~]# yum install -y yum-utils
    [root@docker01 ~]# yum-config-manager \ --add-repo \ [https://download.docker.com/linux/centos/docker-ce.repo]
    [root@docker01 /etc/yum.repos.d]# ls (配置完毕会出现一个docker-re.repe文件)
    CentOS-Base.repo CentOS-Media.repo docker-ce.repo
    CentOS-CR.repo CentOS-Sources.repo epel.repo
    CentOS-Debuginfo.repo CentOS-Vault.repo
    CentOS-fasttrack.repo CentOS-x86_64-kernel.repo
    

    第四步:安装docker-ce

    [root@docker01 ~]# yum install -y docker-ce
    [root@docker01 ~]# systemctl start docker
    [root@docker01 ~]# systemctl enable docker
    

    第五步:验证是否启动成功(几种验证方法)

    [root@docker01 ~]# docker version
    [root@docker01 ~]# docker info
    [root@docker01 ~]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    

    官方文档:https://docs.docker.com
    阿里云源:http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    五.Docker镜像管理
    • 镜像是什么?
    • 配置加速器
    • 镜像常用管理命令

    1.镜像是什么?

    • 一个分层存储的文件,不是一个单一的文件
    • 一个软件的环境
    • 一个镜像可以创建N个容器
    • 一种标准化的交付
    • 一个不包含Linux内核而又精简的Linux操作系统
    

    2.配置加速器
    Docker Hub是由Docker公司负责维护的公共镜像仓库,包含大量的容器镜像,Docker工具默认
    从这个公共镜像库下载镜像。地址:https://hub.docker.com
    为什么配置加速器,举个简单的例子:

    [root@docker01 ~]# docker run -d nginx
    Unable to find image 'nginx:latest' locally #本地找不到nginx镜像包
    配置镜像加速器:
    [root@docker01 ~]# vi /etc/docker/daemon.json
    [root@docker01 ~]# cat /etc/docker/daemon.json
    {
    "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
    }
    [root@docker01 ~]# systemctl restart docker
    

    3.常用管理命令
    命令格式:docker image COMMAND


    image.png

    查看本地有哪些镜像

    [root@docker01 ~]# docker image ls
    REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
    nginx        latest    519e12e2a84a   5 hours ago   133MB
    

    查看镜像的构建过程

    [root@docker01 ~]# docker history  nginx
    IMAGE          CREATED        CREATED BY                                      SIZE      COMMENT
    519e12e2a84a   5 hours ago    /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B        
    <missing>      5 hours ago    /bin/sh -c #(nop)  STOPSIGNAL SIGQUIT           0B        
    <missing>      5 hours ago    /bin/sh -c #(nop)  EXPOSE 80                    0B        
    <missing>      5 hours ago    /bin/sh -c #(nop)  ENTRYPOINT ["/docker-entr…   0B        
    <missing>      5 hours ago    /bin/sh -c #(nop) COPY file:09a214a3e07c919a…   4.61kB    
    <missing>      5 hours ago    /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7…   1.04kB    
    <missing>      5 hours ago    /bin/sh -c #(nop) COPY file:0b866ff3fc1ef5b0…   1.96kB    
    <missing>      5 hours ago    /bin/sh -c #(nop) COPY file:65504f71f5855ca0…   1.2kB     
    <missing>      5 hours ago    /bin/sh -c set -x     && addgroup --system -…   63.8MB    
    <missing>      5 hours ago    /bin/sh -c #(nop)  ENV PKG_RELEASE=1~buster     0B        
    <missing>      5 hours ago    /bin/sh -c #(nop)  ENV NJS_VERSION=0.5.3        0B        
    <missing>      5 hours ago    /bin/sh -c #(nop)  ENV NGINX_VERSION=1.19.9     0B        
    <missing>      5 hours ago    /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B        
    <missing>      11 hours ago   /bin/sh -c #(nop)  CMD ["bash"]                 0B        
    <missing>      11 hours ago   /bin/sh -c #(nop) ADD file:c855b3c65f5ba94d5…   69.3MB
    

    查看镜像的详细信息

    [root@docker01 ~]# docker inspect nginx
    

    从hub仓库下载一个镜像

    [root@docker01 ~]# docker pull redis
    

    删除镜像

    [root@docker01 ~]# docker rmi 7f33e76fcb56
    Untagged: redis:latest
    Untagged: redis@sha256:7ff49b5e96de6e4472664591866bf4bb8d52eecf1405e8b2e16b49237dbee4c4
    Deleted: sha256:7f33e76fcb56c96639cd127aca5f6cb61c526c3c6013048f637c32e863b7b012
    Deleted: sha256:072f491f6aa3d8fd4171edb8cf967a690e152d263fc9ee96a5451807004e5b87
    Deleted: sha256:b74e939adc897204e67f7b9590f50945bdfd665472adfaefa886113200e3c75d
    Deleted: sha256:3f869c3604694dfd4d78a73f2374f835d10d8158b18b62fcf1aa32bb89457879
    Deleted: sha256:b9735bc171046d655ce1bec3d81f83770ce81522165e26b25957dcb2fdc66d88
    Deleted: sha256:42e8693cf8594736a7783ba70093f158c9155c07c7e0bf1c66d063d961b1d1e5
    Deleted: sha256:346fddbbb0ff19bdb026afb053df490c0c73981a8a985882cf8ee3d716735e87
    

    移除没有被标记的镜像

    [root@docker01 ~]# docker image prune 
    WARNING! This will remove all dangling images.
    Are you sure you want to continue? [y/N] y
    Total reclaimed space: 0B
    [root@docker01 ~]# docker image prune -a
    WARNING! This will remove all images without at least one container associated to them.
    Are you sure you want to continue? [y/N] y
    Total reclaimed space: 0B
    

    导出一个镜像

    [root@docker01 ~]# docker save redis -o redis.tar
    [root@docker01 ~]# ls
    anaconda-ks.cfg  redis.tar
    [root@docker01 ~]# scp -r redis.tar root@10.0.0.23:~    (推送到没有网络的服务器)
    

    导入一个镜像

    [root@docker02 ~]# docker load -i redis.tar   (导入到本地仓库)
    

    六.创建容器常用选项
    命令格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

    选项 描述
    -i, –interactive 交互式
    -t, –tty 分配一个伪终端
    -d, –detach 运行容器到后台
    -e, –env 设置环境变量
    -p, –publish list 发布容器端口到主机
    -P, –publish-all 发布容器所有EXPOSE的端口到宿主机随机端口
    --name string 指定容器名称
    -h, –hostname 设置容器主机名
    --ip string 指定容器IP,只能用于自定义网络
    --network 连接容器到一个网络
    -v, –volume list --mount mount(新方式) ) 将文件系统附加到容器
    --restart string 容器退出时重启策略,默认no,可选值:[always|on-failure]
    -m,–memory 容器可以使用的最大内存量
    –memory-swap 允许交换到磁盘的内存量
    –memory-swappiness=<0-100> 容器使用SWAP分区交换的百分比(0-100,默认为-1)
    –oom-kill-disable 禁用OOM Killer
    --cpus 可以使用的CPU数量
    –cpuset-cpus 限制容器使用特定的CPU核心,如(0-3, 0,1)
    –cpu-shares CPU共享(相对权重)

    1.使用exec 进入交互式终端,让进行夯住,让他一直运行

    [root@docker01 ~]# docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED             STATUS             PORTS                  NAMES
    d4007ba6d6da   nginx     "/docker-entrypoint.…"   50 minutes ago      Up 50 minutes      0.0.0.0:8080->80/tcp   inspiring_brahmagupta
    [root@docker01 ~]# docker exec  -it d4007ba6d6da bash
    root@d4007ba6d6da:/# exit
    使用-d参数,让容器运行到后台,不使用的话会在当前终端给输出出来
    ![image.png](https://img.haomeiwen.com/i17001435/cb448ff128685789.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    <meta charset="utf-8">
    
    正常都会加-d
    
    [root@docker01 ~]# docker run -d nginx
    

    2.测试-d -p -e --name --restart=always参数

    [root@docker01 ~]# docker run -d -e env=prod -p 88:80 --name web -h web --restart=always nginx
    600d94998f1b212f2736eb593ccd1cf2db0da672a40fd53fedc22fc335423f50
    [root@docker01 ~]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    600d94998f1b nginx "/docker-entrypoint.…" 13 seconds ago Up 12 seconds 0.0.0.0:88->80/tcp web
    
    测试效果
    [root@docker01 ~]# docker exec -it web bash
    root@web:~# hostname
    web
    root@web:~# echo $env
    prod
    root@web:/# cd /usr/share/nginx/html/
    root@web:/usr/share/nginx/html# echo "<h1>wangwenbin DSB<h1>" > index.html
    
    image.png

    3.限制内容和cpu

    [root@docker01 ~]# docker run -d -m="500m" --cpus="1" -d nginx
    628440e526f18c03cfde4d42bf9a715fb4bf0d9b2f2e4186feb247ee1846ab24
    

    七.常用管理命令
    命令格式:docker container COMMAND

    选项 描述
    ls 列出容器
    inspect 查看一个或多个容器详细信息
    exec 在运行容器中执行命令
    commit 创建一个新镜像来自一个容器
    cp 拷贝文件/文件夹到一个容器
    logs 获取一个容器日志
    port 列出或指定容器端口映射
    top 显示一个容器运行的进程
    stats 显示容器资源使用统计
    stop/start/restart 停止/启动一个或多个容器
    rm 删除一个或多个容器
    prune 移除已停止的容器

    1.列出容器

    [root@docker01 ~]# docker container ls
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
    600d94998f1b   nginx     "/docker-entrypoint.…"   48 minutes ago   Up 48 minutes   0.0.0.0:88->80/tcp     web
    [root@docker01 ~]# docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
    600d94998f1b   nginx     "/docker-entrypoint.…"   50 minutes ago   Up 50 minutes   0.0.0.0:88->80/tcp     we
    

    2.列出最新创建出的容器

    [root@docker01 ~]# docker ps -l
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
    628440e526f1   nginx     "/docker-entrypoint.…"   17 minutes ago   Up 17 minutes   80/tcp    crazy_grothendieck
    

    3.使用exec在容器中运行命令

    [root@docker01 ~]# docker exec -it web/id  bash
    

    4.使用commit将已经构建好的镜像打包到本地仓库中,进行使用

    [root@docker01 ~]# docker commit web test
    sha256:13430bc4a39b20ea6d7b30f63ead1ae43d25dc686a90e407bf8bb2704f1cbf79
    [root@docker01 ~]# docker image ls
    REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
    test         latest    13430bc4a39b   7 seconds ago   133MB
    

    5.将宿主机的某个文件复制到容器中

    [root@docker01 ~]# docker cp redis.tar web:/ 
    [root@docker01 ~]# docker exec web ls
    redis.tar
    

    6.查看容器日志,做故障排查

    [root@docker01 ~]# docker logs web 
    

    7.查看容器端口

    [root@docker01 ~]# docker port web 
    80/tcp -> 0.0.0.0:88
    

    查看容器中运行的进程

    [root@docker01 ~]# docker top web 
    UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
    root                16393               16374               0                   22:13               ?                   00:00:00            nginx: master process nginx -g daemon off;
    101                 16457               16393               0                   22:13               ?                   00:00:00            nginx: worker process
    

    8.显示容器的资源利用率

    默认不加--no-stream,会循环显示
    [root@docker01 ~]# docker stats web --no-stream 
    CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O        PIDS
    600d94998f1b   web       0.00%     2.125MiB / 1.934GiB   0.11%     17.5kB / 10.7kB   717kB / 6.14kB   2
    写脚本使可配合使用
    [root@docker01 ~]# docker stats web --no-stream |awk '{print $2}'
    ID
    web
    

    9.清除已经退出的容器

    [root@docker01 ~]# docker ps -a
    CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES
    fed8be8802fe   centos    "/bin/bash"   16 seconds ago   Exited (0) 15 seconds ago             blissful_ritchie
    [root@docker01 ~]# docker container  prune 
    WARNING! This will remove all stopped containers.
    Are you sure you want to continue? [y/N] y
    Deleted Containers:
    fed8be8802fe69930a65aaea86c8725071ac9d5449f54a76c12259ec1b918878
    
    Total reclaimed space: 0B
    

    docker ps 参数
    -a 显示所有容器(运行和不运行都显示)

    image.png
    -q显示所有容器的id
    [root@docker01 ~]# docker ps -q
    628440e526f1
    10.删除所有容器
    [root@docker01 ~]# docker rm -f `docker ps -aq`
    b83214d78f78
    [root@docker01 ~]# docker ps
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
    

    11.启动,停止,重启容器

    [root@docker01 ~]# docker run -d -p 80:80 nginx
    beb79803c08700a94575590547b1f9fac83cb425b2733b7dc7cb4620f9afe068
    [root@docker01 ~]# docker stop eloquent_dhawan 
    eloquent_dhawan
    [root@docker01 ~]# docker start eloquent_dhawan 
    eloquent_dhawan
    [root@docker01 ~]# docker restart eloquent_dhawan 
    eloquent_dhawan
    

    12.删除

    [root@docker01 ~]# docker rm eloquent_dhawan 
    eloquent_dhawan
    

    八.容器数据持久化
    1.Docker提供三种方式将数据从宿主机挂载到容器中:
    • volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。
    保存数据的最佳方式。
    • bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中。
    1.volumes示例:
    1、创建数据卷

    # docker volume create nginx-vol #创建好的数据卷在/var/lib/docker/volumes
    # docker volume ls   #查看
    # docker volume inspect nginx-vol   #查看详细信息
    

    2、使用数据卷

    # docker run -d --name=nginx-test --mount src=nginxvol,dst=/usr/share/nginx/html nginx 
    # docker run -d --name=nginx-test -v nginxvol:/usr/share/nginx/html nginx
    

    2.bind mounts示例:
    1、挂载宿主机目录到容器

    # docker run -d --name=nginx-test --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx 
    # docker run -d --name=nginx-test -v /app/wwwroot:/usr/share/nginx/html nginx
    

    举例:

    [root@docker01 ~]# docker run -d --name web -p 80:80  -v /opt/rootwww/:/usr/share/nginx/html nginx
    解释:后台创建一个名字为web的nginx ,访问端口为80:80,将/opt/rootwww/挂载到/usr/share/nginx/html。
    1b3d90c83c10e506cbb57b20237eacd845a98822ae71c0bbeadb67ba3fbb42fd
    [root@docker01 ~]# docker ps -a
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                NAMES
    1b3d90c83c10   nginx     "/docker-entrypoint.…"   11 seconds ago   Up 11 seconds   0.0.0.0:80->80/tcp   web
    root@1b3d90c83c10:/# cd /usr/share/nginx/html/
    root@1b3d90c83c10:/usr/share/nginx/html# ls
    浏览器访问没有
    解释:因为挂在的目录没有html文件
    
    image.png

    解决:在互相挂在的两个目录中选择一个,追加html文件

    [root@1b3d90c83c10:/usr/share/nginx/html# echo "<h1>wangwenbin DSB<h1>" > index.html
    
    image.png
    在挂载目录下验证,有此文件,持久化完成
    [root@docker01 ~]# cd /opt/rootwww/
    [root@docker01 /opt/rootwww]# ls
    index.html
    

    制作镜像:
    1.启动容器之后的应用程序,服务产生的数据尽量放到一个目录下 /data
    2.构建不是将已经生成的应用程序数据打包进去
    例如:jenkins、gitlab使用docker都是采用-v将他们自身产生的数据持久化宿主机。

    九.容器网络
    • veth pair:成对出现的一种虚拟网络设备,数据从一端进,从另 一端出。 用于解决网络命名空间之间隔离。
    • docker0:网桥是一个二层网络设备,通过网桥可以将Linux支持 的不同的端口连接起来,并实现类似交换机那样的多对多的通信。


    image.png

    Docker使用iptables实现网络通信。
    外部访问容器: # iptables -t nat -vnL DOCKE
    DNAT:目标地址转换


    image.png

    容器访问外部: # iptables -t nat -vnL POSTROUTING
    SNAT源地址转换


    image.png

    十.Dockerfile构建镜像
    Docker通过Dockerfile自动构建镜像,Dockerfile 是一个包含用于组建镜像的文本文件,由一条一条的指令组成。


    image.png
    1.Dockerfile常用指令
    指令 描述
    FROM 构建新镜像是基于哪个镜像
    LABEL 标签
    RUN 构建镜像时运行的Shell命令
    COPY 拷贝文件或目录到镜像中
    ADD 解压压缩包并拷贝
    ENV 设置环境变量
    USER 为RUN、CMD和ENTRYPOINT执行命令指定运行用户
    EXPOSE 声明容器运行的服务端口
    WORKDIR 为RUN、CMD、ENTRYPOINT、COPY和ADD设置工作目录
    CMD 运行容器时默认执行,如果有多个CMD指令,最后一个生效

    具体操作:

    [root@docker01 ~]# mkdir dockerfile
    [root@docker01 /opt]# cd /root/dockerfile/
    [root@docker01 ~/dockerfile]# ls
    Dockerfile
    [root@docker01 ~/dockerfile]# cat Dockerfile 
    FROM centos:latest
    LABEL nginx chuanjian
    RUN yum install epel-release -y && \
        yum install nginx -y 
    CMD ["nginx","-g","daemon off;"]
    [root@docker01 ~/dockerfile]# docker build -t nginx:V1 .
    [root@docker01 ~/dockerfile]# docker image ls
    REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
    nginx        V1        1c709626ccf5   14 minutes ago   313MB
    [root@docker01 ~/dockerfile]# docker run -d --name web3 -p 93:80  -v /opt/rootwww/:/usr/share/nginx/html nginx:V1 
    41362b7ee57812223e05c55165cc2fc8eb5bc99680823b94d3711228d9ed3419
    [root@docker01 ~/dockerfile]# docker ps -a
    CONTAINER ID   IMAGE          COMMAND                  CREATED             STATUS                      PORTS                NAMES
    41362b7ee578   nginx:V1       "nginx -g 'daemon of…"   12 seconds ago      Up 12 seconds               0.0.0.0:93->80/tcp   web3
    

    验证:


    image.png

    <meta charset="utf-8">

    1.构建镜像命令

    Usage: docker build [OPTIONS] PATH | URL | - [flags] Options:
    -t, --tag list # 镜像名称
    -f, --file string # 指定Dockerfile文件位置
    
    # docker build -t shykes/myapp .
    
    # docker build -t shykes/myapp -f /path/Dockerfile /path
    
    # docker build -t shykes/myapp [http://www.example.com/Dockerfile](http://www.example.com/Dockerfile)
    

    构建Nginx镜像

    FROM centos:7
    LABEL maintainer www.ctnrs.com
    RUN yum install -y gcc gcc-c++ make \
    openssl-devel pcre-devel gd-devel \
    iproute net-tools telnet wget curl && \
    yum clean all && \
    rm -rf /var/cache/yum/*
    ADD nginx-1.15.5.tar.gz /
    RUN cd nginx-1.15.5 && \
    ./configure --prefix=/usr/local/nginx \
    --with-http_ssl_module \
    --with-http_stub_status_module && \
    make -j 4 && make install && \
    mkdir /usr/local/nginx/conf/vhost && \
    cd / && rm -rf nginx* && \
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    ENV PATH $PATH:/usr/local/nginx/sbin
    COPY nginx.conf /usr/local/nginx/conf/nginx.conf
    WORKDIR /usr/local/nginx
    EXPOSE 80
    CMD ["nginx", "-g", "daemon off;"]
    

    构建Tomcat镜像

    FROM centos:7
    MAINTAINER www.ctnrs.com
    ENV VERSION=8.5.43
    RUN yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y && \
    yum clean all && \
    rm -rf /var/cache/yum/*
    ADD apache-tomcat-${VERSION}.tar.gz /usr/local/
    RUN mv /usr/local/apache-tomcat-${VERSION} /usr/local/tomcat && \
    sed -i '1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"'
    /usr/local/tomcat/bin/catalina.sh && \
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    ENV PATH $PATH:/usr/local/tomcat/bin
    WORKDIR /usr/local/tomcat
    EXPOSE 8080
    CMD ["catalina.sh", "run"]
    

    相关文章

      网友评论

          本文标题:Docker

          本文链接:https://www.haomeiwen.com/subject/kogqlltx.html