1、DockerFile解析

1、简介

  • Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。

    1、构建三步骤

    • 创建DockerFile文件
    • Docker build
    • Docker run

      2、文件样式

  • 以centos为例

  • https://github.com/CentOS/sig-cloud-instance-images/blob/ccd17799397027acf9ee6d660e75b8fce4c852e8/docker/Dockerfile

    1. FROM scratch
    2. ADD centos-8-x86_64.tar.xz /
    3. LABEL org.label-schema.schema-version="1.0" org.label-schema.name="CentOS Base Image" org.label-schema.vendor="CentOS" org.label-schema.license="GPLv2" org.label-schema.build-date="20201204"
    4. CMD ["/bin/bash"]

    2、DockerFile构建过程解析

    1、Dockerfile内容基础知识

  • 1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数

  • 2: 指令按照从上到下,顺序执行
  • 3: #表示注释
  • 4:每条指令都会创建一个新的镜像层,并对镜像进行提交

    2、Docker执行Dockerfile的大致流程

  • (1) docker从基础镜像运行一个容器

  • (2)执行一条指零并对容器作出修改
  • (3)执行类似docker commit的操作提交一个新的镜像层
  • (4) docker再基于刚提交的镜像运行一个新容器
  • (5)执行dockerfile中的下一条指令直到所有指令都执行完成

    3、小总结

  • 从应用软件的角度来看,Dockerfile、 Docker镜像与Docker容器分别代表软件的三个不同阶段。

    • Dockerfile是软件的原材料
    • Docker镜像是软件的交付品
    • Docker容器则可以认为是软件的运行态。
  • Dockerfile面向开发,Docker镜 像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可, 合力充当Docker体系的基石。

image.png

  • 1 Dockerfile, 需要定义一个Dockerfile, Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;
  • 2 Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行Docker镜像时,会真正开始提供服务;
  • 3 Docker容器,容器是直接提供服务的。

    3、DockerFile体系结构

    1、相关命令

  • FROM

    • 当前编写的这个镜像是基于哪个镜像的
  • MAINTAINER
    • 镜像维护者的姓名和邮箱
  • RUN
    • 容器构建的时候需要运行的命令
  • EXPOSE
    • 当前容器对外暴露的运行的端口
  • WORKDIR
    • 登录的时候工作目录
  • ENV
    • 用来在构建镜像过程中设置环境变量
      • ENV MY_PATH /usr/mytest这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;也可以在其它指令中直接使用这些环境变量,
      • 比如: WORKDIR $MY_PATH
  • ADD
    • 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
  • COPY
    • 类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
      • COPY src dest
      • COPY [“src”,”dest”]
  • VOLUME
    • 容器数据卷用于数据保存和执久化工作
  • CMD
    • 指定一个容器启动时要运行的命令
    • Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
    • CMD谷器后动命令CMD指令的格式和RUN相似,也是两种格式:
      • shell格式: CMD <命令>
      • exec 格式: CID [“可执行文件”,”参数1”, “参数2”…]
      • 参数列表格式: CMD [“参数1”,“参数2”…]。指定了ENTRYPOINT 指令后,用CMD指定具体的参数。
  • ENTRYPOINT
    • 指定一个容器启动时要运行的命令
    • ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数
  • ONBUILD

    • 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

      2、小总结

      image.png

      4、案例

      1、Base镜像(scratch)

      Docker Hub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的

      2、自定义镜像mycentos

  • 初始centos运行该镜像进时默认路径是/

  • 默认不支持vim
  • 默认不支持ifconfig

(1)编写dockerfile文件

from centos

ENV mypath /tmp
WORKDIR $mypath


RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80
CMD /bin/bash

(2)编译该文件

djydeMacBook-Pro:Desktop DD$ docker build -f mycentos -t djy/mycentos:2.0 .
[+] Building 1.0s (8/8) FINISHED                                                
 => [internal] load build definition from mycentos                         0.0s
 => => transferring dockerfile: 163B                                       0.0s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => [internal] load metadata for docker.io/library/centos:latest           0.0s
 => [1/4] FROM docker.io/library/centos                                    0.0s
 => CACHED [2/4] WORKDIR /tmp                                              0.0s
 => CACHED [3/4] RUN yum -y install vim                                    0.0s
 => CACHED [4/4] RUN yum -y install net-tools                              0.0s
 => exporting to image                                                     0.8s
 => => exporting layers                                                    0.8s
 => => writing image sha256:e7ce4ec15795e6c98e98c1f2c20f0299c50d58800f3d2  0.0s
 => => naming to docker.io/djy/mycentos:2.0                                0.0s
djydeMacBook-Pro:Desktop DD$ docker images
REPOSITORY        TAG       IMAGE ID       CREATED          SIZE
djy/mycentos      2.0       e7ce4ec15795   48 seconds ago   292MB

(3)运行容器

djydeMacBook-Pro:Desktop DD$ docker run -it --name mycentos e7ce4ec15795

(4)查看历史

djydeMacBook-Pro:Desktop DD$ docker history e7ce4ec15795
IMAGE          CREATED         CREATED BY                                      SIZE      COMMENT
e7ce4ec15795   6 minutes ago   CMD ["/bin/sh" "-c" "/bin/bash"]                0B        buildkit.dockerfile.v0
<missing>      6 minutes ago   EXPOSE map[80/tcp:{}]                           0B        buildkit.dockerfile.v0
<missing>      6 minutes ago   RUN /bin/sh -c yum -y install net-tools # bu…   14.4MB    buildkit.dockerfile.v0
<missing>      6 minutes ago   RUN /bin/sh -c yum -y install vim # buildkit    68.1MB    buildkit.dockerfile.v0
<missing>      7 minutes ago   WORKDIR /tmp                                    0B        buildkit.dockerfile.v0
<missing>      7 minutes ago   ENV mypath=/tmp                                 0B        buildkit.dockerfile.v0
<missing>      8 months ago    /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      8 months ago    /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
<missing>      8 months ago    /bin/sh -c #(nop) ADD file:bd7a2aed6ede423b7…   209MB

3、CMD/ENTRYPOINT区别

  • 都是指定一个容器启动时要运行的命令

    1、CMD

  • Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换

  • Case

    • tomcat的讲解演示
      • docker run -it tomcat ls -l
        djydeMacBook-Pro:Desktop DD$ docker run -it tomcat ls -l
        total 156
        -rw-r--r-- 1 root root 18949 Jul 31 04:12 BUILDING.txt
        -rw-r--r-- 1 root root  6210 Jul 31 04:12 CONTRIBUTING.md
        -rw-r--r-- 1 root root 57092 Jul 31 04:12 LICENSE
        -rw-r--r-- 1 root root  2333 Jul 31 04:12 NOTICE
        -rw-r--r-- 1 root root  3372 Jul 31 04:12 README.md
        -rw-r--r-- 1 root root  6898 Jul 31 04:12 RELEASE-NOTES
        -rw-r--r-- 1 root root 16507 Jul 31 04:12 RUNNING.txt
        drwxr-xr-x 2 root root  4096 Aug 18 20:48 bin
        drwxr-xr-x 2 root root  4096 Jul 31 04:12 conf
        drwxr-xr-x 2 root root  4096 Aug 18 20:47 lib
        drwxrwxrwx 2 root root  4096 Jul 31 04:12 logs
        drwxr-xr-x 2 root root  4096 Aug 18 20:47 native-jni-lib
        drwxrwxrwx 2 root root  4096 Aug 18 20:47 temp
        drwxr-xr-x 2 root root  4096 Aug 18 20:47 webapps
        drwxr-xr-x 7 root root  4096 Jul 31 04:12 webapps.dist
        drwxrwxrwx 2 root root  4096 Jul 31 04:12 work
        djydeMacBook-Pro:Desktop DD$ docker ps
        CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
        bae11da09497   e7ce4ec15795   "/bin/sh -c /bin/bash"   15 minutes ago   Up 15 minutes   80/tcp    mycentos
        6a7996772568   djy/centos     "/bin/sh -c /bin/bash"   20 hours ago     Up 20 hours               dc04
        djydeMacBook-Pro:Desktop DD$
        

        2、ENTRYPOINT

  • docker run之后的参数会被当做参数传递给ENTRYPOINT,之后形成新的命令组合

    from centos
    run yum install -y curl
    cmd ["curl", "-s", "http://ip.cn"]
    

    上面这个dockerfile被编译之后docker run mycentos -i后面加的参数直接cmd [“curl”, “-s”, “http://ip.cn"]被替换成了-i 这个命令会报错找到不到这个命令

    from centos
    run yum install -y curl
    entrypoint ["curl", "-s", "http://ip.cn"]
    

    而这个docker run mycentos -i运行之后会 会相当于变成了entrypoint [“curl”, “-s”, “-i”, “http://ip.cn“]

    4、ONBUILD

    当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
    父dockerfile

    from centos
    onbuild run echo 'father images onbuild'
    

    子dockerfile

    from myipfather
    

    build之后会到会有一句打印
    RUN echo ‘father images onbuild’

    djydeMacBook-Pro:dockerfile DD$ docker build -f myipfather -t myipfather .
    [+] Building 0.1s (5/5) FINISHED                                                
    => [internal] load build definition from myipfather                       0.0s
    => => transferring dockerfile: 94B                                        0.0s
    => [internal] load .dockerignore                                          0.0s
    => => transferring context: 2B                                            0.0s
    => [internal] load metadata for docker.io/library/centos:latest           0.0s
    => CACHED [1/1] FROM docker.io/library/centos                             0.0s
    => exporting to image                                                     0.0s
    => => exporting layers                                                    0.0s
    => => writing image sha256:22bb20a93c7d19bef8453bfb9b775093cc387019bcb34  0.0s
    => => naming to docker.io/library/myipfather                              0.0s
    djydeMacBook-Pro:dockerfile DD$ docker build -f myip2 -t myip2 .
    [+] Building 0.4s (6/6) FINISHED                                                
    => [internal] load build definition from myip2                            0.0s
    => => transferring dockerfile: 53B                                        0.0s
    => [internal] load .dockerignore                                          0.0s
    => => transferring context: 2B                                            0.0s
    => [internal] load metadata for docker.io/library/myipfather:latest       0.0s
    => CACHED [1/1] FROM docker.io/library/myipfather                         0.0s
    => [2/1] RUN echo 'father images onbuild'                                 0.2s
    => exporting to image                                                     0.0s
    => => exporting layers                                                    0.0s
    => => writing image sha256:09b51e4c4558f0719e6ea50557b9777de49a94be8ef9f  0.0s
    => => naming to docker.io/library/myip2
    

    5、自定义镜像Tomcat9

  • (1)创建一个目录用于编写tomcat的dockerfile

  • (2)创建dockerfile

    FROM centos
    MAINTAINER djy<812297736@qq.com>
    #把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
    COPY c.txt /usr/local/cincontainer.txt
    #java与tomcat添加到容器中
    ADD jdk-8u301-linux-x64.tar.gz /usr/local/
    ADD apache-tomcat-9.0.52.tar.gz /usr/local/
    #安装vim编辑器
    RUN yum -y install vim
    #设置工作访问时候的WORKDIR路径,登录落脚点
    ENV MYPATH /usr/local
    WORKDIR $MYPATH
    #配置java与tomcat环境变量
    ENV JAVA_HOME /usr/local/jdk1.8.0_301
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.52 
    ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.52
    ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
    #容器运行时监听的端口
    EXPOSE 8080
    #启动时运行tomcat
    # ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh" ]
    # CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run" ]
    RUN mkdir /usr/local/apache-tomcat-9.0.52/bin/logs/
    RUN touch /usr/local/apache-tomcat-9.0.52/bin/logs/catalina.out
    CMD /usr/local/apache-tomcat-9.0.52/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.52/bin/logs/catalina.out
    
  • (3)编译

    docker build -f mytomcat -t djy/mytomcat .
    
    djydeMacBook-Pro:tomcat9 DD$ docker build -f mytomcat -t djy/mytomcat .
    [+] Building 0.5s (13/13) FINISHED                                              
    => [internal] load build definition from mytomcat                         0.0s
    => => transferring dockerfile: 1.19kB                                     0.0s
    => [internal] load .dockerignore                                          0.0s
    => => transferring context: 2B                                            0.0s
    => [internal] load metadata for docker.io/library/centos:latest           0.0s
    => [internal] load build context                                          0.0s
    => => transferring context: 970B                                          0.0s
    => [1/8] FROM docker.io/library/centos                                    0.0s
    => CACHED [2/8] COPY c.txt /usr/local/cincontainer.txt                    0.0s
    => CACHED [3/8] ADD jdk-8u301-linux-x64.tar.gz /usr/local/                0.0s
    => CACHED [4/8] ADD apache-tomcat-9.0.52.tar.gz /usr/local/               0.0s
    => CACHED [5/8] RUN yum -y install vim                                    0.0s
    => CACHED [6/8] WORKDIR /usr/local                                        0.0s
    => CACHED [7/8] RUN mkdir /usr/local/apache-tomcat-9.0.52/bin/logs/       0.0s
    => [8/8] RUN touch /usr/local/apache-tomcat-9.0.52/bin/logs/catalina.out  0.3s
    => exporting to image                                                     0.0s
    => => exporting layers                                                    0.0s
    => => writing image sha256:750f924b9264dbe710e29f0b6d1c81ea762ac891b25f5  0.0s
    => => naming to docker.io/djy/mytomcat
    
  • (4)运行

    docker run -it -p 8090:8080 -v /Users/djy/Desktop/tomcat9/test:/usr/local/apache-tomcat-9.0.52/webapp/test -v /Users/djy/Desktop/tomcat9/logs://usr/local/apache-tomcat-9.0.52/logs --privileged=true djy/mytomcat
    
    djydeMacBook-Pro:tomcat9 DD$ docker run -it -p 8090:8080 -v /Users/djy/Desktop/tomcat9/test:/usr/local/apache-tomcat-9.0.52/webapp/test -v /Users/djy/Desktop/tomcat9/logs://usr/local/apache-tomcat-9.0.52/logs djy/mytomcat
    Using CATALINA_BASE:   /usr/local/apache-tomcat-9.0.52
    Using CATALINA_HOME:   /usr/local/apache-tomcat-9.0.52
    Using CATALINA_TMPDIR: /usr/local/apache-tomcat-9.0.52/temp
    Using JRE_HOME:        /usr/local/jdk1.8.0_301
    Using CLASSPATH:       /usr/local/apache-tomcat-9.0.52/bin/bootstrap.jar:/usr/local/apache-tomcat-9.0.52/bin/tomcat-juli.jar
    Using CATALINA_OPTS:   
    Tomcat started.
    

    运行之后容器卷挂载过来了
    这样就相当于我们可以把test的访问发布在这里了
    image.png

  • (5)最终访问8080可以看到tomcat

image.png

  • (6)另外还可以访问这个镜像进行一些数据查看

    • docker exec ab647de7fd65 ls -l
      djydeMacBook-Pro:tomcat9 DD$ docker exec ab647de7fd65 ls -l
      total 52
      drwxr-xr-x 1 root  root  4096 Aug 26 18:53 apache-tomcat-9.0.52
      drwxr-xr-x 2 root  root  4096 Nov  3  2020 bin
      -rw-r--r-- 1 root  root     0 Aug 26 18:43 cincontainer.txt
      drwxr-xr-x 2 root  root  4096 Nov  3  2020 etc
      drwxr-xr-x 2 root  root  4096 Nov  3  2020 games
      drwxr-xr-x 2 root  root  4096 Nov  3  2020 include
      drwxr-xr-x 8 10143 10143 4096 Jun  9 13:58 jdk1.8.0_301
      drwxr-xr-x 2 root  root  4096 Nov  3  2020 lib
      drwxr-xr-x 3 root  root  4096 Dec  4  2020 lib64
      drwxr-xr-x 2 root  root  4096 Nov  3  2020 libexec
      drwxr-xr-x 2 root  root  4096 Nov  3  2020 sbin
      drwxr-xr-x 5 root  root  4096 Dec  4  2020 share
      drwxr-xr-x 2 root  root  4096 Nov  3  2020 src
      

      5、总结

      image.png

      2、Docker常用安装

      1、总体步骤

      (1)搜索镜像
      (2)拉取镜像
      (3)查看镜像
      (4)启动镜像
      (5)停止容器
      (6)移除容器

      2、安装tomcat

  • docker hub上面查找tomcat镜像

    • docker serach tomcat
  • 从docker hub上拉取tomcat镜像到本地
    • docker pull tomcat
  • docker images 查看是否有拉取到的tomcat
  • 使用tomcat镜像创建容器(也叫运行镜像)

    • docker run -it -p 8080:8080 tomcat

      3、安装mysql

  • docker hub上面查找mysql镜像

    • docker search mysql
  • 从docker hub上(阿里云加速器)拉取mysql镜像到本地标签为5.6
    • docker pull mysql:5.6
  • 使用mysql运行5.6镜像容器

    docker run -p 10004:3306 --name mysql --security-opt seccomp=unconfined -v /Users/djy/Desktop/mysql/conf:/etc/mysql/conf.d -v /Users/djy/Desktop/mysql/logs:/logs -v /Users/djy/Desktop/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
    
  • 进入mysql的centos容器中

    • 记住得加-it
      docker exec -it mysql /bin/bash
      

      1、mysql数据备份

      docker exec e8f127d655df mysqldump --all-databases -uroot -p123456 > /Users/djy/Desktop/mysql/all-databases.sql
      

      2、安装mysql8.0

  • 安装在mydata文件夹下

    • —security-opt seccomp=unconfined 关闭Seccomp安全问题
    • 不然容易出现mbind: Operation not permitted问题
      docker run --name mysql --security-opt seccomp=unconfined -p 3306:3306 -v /mydata/mysql/conf:/etc/mysql/conf.d -v /mydata/mysql/logs:/logs  -v /mydata/mysql/lib:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0
      

      3、进入容器配置时区(永久)

      1、进入容器

      docker exec -it 容器名称/容器id /bin/bash
      

      2、进入目录

      cd /etc/mysql
      
  • 下面有文件

    • /etc/mysql/mysql.conf.d
    • /etc/mysql/my.cnf

      3、安装vim

      apt-get update
      apt-get install -y vim
      
      如果命令apt-get非常慢的话设置一下镜像
  • 参考如下,或者直接执行下面的命令

  • https://blog.csdn.net/qq_40016971/article/details/107887486

    sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
    
  • 设置完镜像需要执行

    apt-get update
    

    4、进入配置文件添加配置

    default-time-zone = '+08:00'
    

    image.png

  • 重启容器就好了

    4、进入数据临时修改时区

    SET GLOBAL time_zone = '+8:00'
    

    5、解决docker中运行的mysql总是卡住的问题

    1、命令查看mysql日志

    docker logs -f mysql
    

    总是出现
    [Warning] [MY-010055] [Server] IP address ‘111.0.183.159’ could not be resolved: Temporary failure in name resolution
    原因是mysql会反向dns 解析,所以有时候会出现解析失败,这个时候我们就可以禁用掉该功能

    2、解决方案

    进入容器

    docker exec -it mysql /bin/bash
    

    3、进入目录

  • 下面有文件

    • /etc/mysql/mysql.conf.d
    • /etc/mysql/my.cnf

      4、添加内容

  • skip-name-resolve 关闭反向dns解析

    [mysqld]
    skip-name-resolve
    

    5、检查数据库时区

    1、查看数据库当前时间

    mysql> SELECT NOW();
    +---------------------+
    | NOW()               |
    +---------------------+
    | 2022-01-23 16:59:35 |
    +---------------------+
    1 row in set (0.01 sec)
    

    2、检查当前数据库时区

    mysql> SHOW VARIABLES LIKE '%time_zone%';
    +------------------+--------+
    | Variable_name    | Value  |
    +------------------+--------+
    | system_time_zone | UTC    |
    | time_zone        | +08:00 |
    +------------------+--------+
    2 rows in set (0.01 sec)
    

    6、解决docker中mysql(mbind: Operation not permitted)问题

    1、原因

  • 这是Docker的Seccomp安全限制问题

  • 并且官方给出了指导和解释: DockerHup官方传送门

    2、解决方法

  • 在docker run命令中加入 —security-opt seccomp=unconfined

    docker run --name mysql --security-opt seccomp=unconfined -p 3306:3306 -v /mydata/mysql/conf:/etc/mysql/conf.d -v /mydata/mysql/logs:/logs  -v /mydata/mysql/lib:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0
    

    7、docker中mysql解决使用group by 失败的问题

    在my.cnf中添加如下配置

    [mysqld]
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    

    4、安装redis

  • docker hub上面查找mysql镜像

  • 从docker hub上(阿里云加速器)拉取redis镜像到本地标签
    • docker pull redis:6.2.5
  • 运行

    • /Users/djy/Desktop/redis/conf/redis.conf 是一个目录
      • 所以这里我们先创建出这个文件/redis/conf/redis.conf
        docker run -p 6379:6379 -v /Users/djy/Desktop/redis/data:/data -v /Users/djy/Desktop/redis/conf/redis.conf:/usr/local/etc/redis.conf -d redis:6.2.5  redis-server /user/local/etc/redis/redis.conf --appendonly yes
        

        5、安装gitea

        1、下载镜像

        docker pull gitea/gitea
        

        2、启动

        1、官方启动方式

        docker run -d --name=gitea -p 10022:22 \
        -p 10080:3000 -v /lianhong-brand-choice/mydata/gitea:/data \
        gitea/gitea:latest
        

        2、自己配置启动方式

  • 注意安全组开放端口10080

    docker run --name gitea -itd -p 10022:22 -p 3000:3000 \
    -v /lianhong-brand-choice/mydata/gitea:/data \
    --ip=8.136.154.180 \
    gitea/gitea
    

    3、配置nginx

  • 域名要指向该服务器

  • 这里配置成域名git.lhdxlhdx.com

      upstream lianhong_gitea{
              server 127.0.0.1:3000;
      }
          server {
          listen       80;
          server_name  git.lhdxlhdx.com;
    
          location / {
              proxy_pass http://lianhong_gitea;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header REMOTE-HOST $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          }
    
          error_page 500 502 503 504 /50x.html;
              location = /50x.html {
          }
          server_tokens off;
      }
    

    4、访问网址

  • http://git.lhdxlhdx.com/

  • 设置自己想要的账号名称
  • image.png
  • image.png
  • image.png

    6、安装phpMyAdmin

    1、命令运行

    docker run --name phpmyadmin -d -e PMA_ARBITRARY=1 -p 8091:80 phpmyadmin/phpmyadmin
    

    2、然后访问

  • 输入你的ip和账号密码就行了

image.png

3、本地镜像发布到阿里云

1、发布流程

image.png

2、镜像的生成方法

  • 1、前面的DockerFile生成
  • 2、从容器创建一个新的镜像
    • docker commit [options] 容器ID [repository[:tag]]
      djydeMacBook-Pro:~ DD$ docker ps
      CONTAINER ID   IMAGE          COMMAND                  CREATED       STATUS       PORTS                                         NAMES
      1dfa74c2ce7a   mysql          "docker-entrypoint.s…"   2 hours ago   Up 2 hours   3306/tcp, 33060/tcp                           recursing_solomon
      e8f127d655df   mysql:5.6      "docker-entrypoint.s…"   8 hours ago   Up 8 hours   0.0.0.0:10004->3306/tcp, :::10004->3306/tcp   mysql
      8b97e9e261d8   djy/mytomcat   "/bin/sh -c '/usr/lo…"   8 hours ago   Up 8 hours   0.0.0.0:8090->8080/tcp, :::8090->8080/tcp     fervent_jones
      djydeMacBook-Pro:~ DD$ docker commit -a 'small red' -m 'test' 8b97e9e261d8 djy/mytomcat:3.0
      sha256:b651aac4e3f37daa5d828a43c8a323f72935f2a51948ead7512fe522be54320d
      

3、推送到远端的阿里云

  • 1、本地镜像素材原型

    djydeMacBook-Pro:~ DD$ docker images djy/centos
    REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
    djy/centos   latest    1b520c723bd3   8 months ago   209MB
    
  • 阿里云开发者平台

  • 创建仓库镜像

image.png

  • 选择本地仓库

image.png

  • 将镜像推送到registry

    • 密码可以单独设置

      docker login --username=红领巾账号3 registry.cn-hangzhou.aliyuncs.com
      
      $ docker login --username=红领巾账号3 registry.cn-hangzhou.aliyuncs.com
      $ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/daijunyi/centos1:[镜像版本号]
      $ docker push registry.cn-hangzhou.aliyuncs.com/daijunyi/centos1:[镜像版本号]
      
    • 重新绑定一下镜像关系

      djydeMacBook-Pro:~ DD$ docker images
      REPOSITORY        TAG       IMAGE ID       CREATED          SIZE
      djy/mytomcat      3.0       b651aac4e3f3   11 minutes ago   655MB
      djydeMacBook-Pro:~ DD$ docker tag b651aac4e3f3 registry.cn-hangzhou.aliyuncs.com/daijunyi/centos1:1.0
      djydeMacBook-Pro:~ DD$ docker images
      REPOSITORY                                           TAG       IMAGE ID       CREATED          SIZE
      djy/mytomcat                                         3.0       b651aac4e3f3   11 minutes ago   655MB
      registry.cn-hangzhou.aliyuncs.com/daijunyi/centos1   1.0       b651aac4e3f3   11 minutes ago   655MB
      
    • 开始推送

      djydeMacBook-Pro:~ DD$ docker push registry.cn-hangzhou.aliyuncs.com/daijunyi/centos1:1.0
      The push refers to repository [registry.cn-hangzhou.aliyuncs.com/daijunyi/centos1]
      6bf3788d4708: Pushed 
      932747c60224: Pushed 
      4af77ac788e6: Pushed 
      5f70bf18a086: Pushed 
      989eccca733b: Pushed 
      e7b54c3c05e5: Pushed 
      298f378fd461: Pushed 
      10279240a4e0: Pushed 
      2653d992f4ef: Pushed 
      1.0: digest: sha256:97ec1ff59ca5db2de5e362f52db0c15cf459e8ff3a3749ebe198c17b892811d8 size: 2201
      
  • 拉取

    docker pull registry.cn-hangzhou.aliyuncs.com/daijunyi/centos1:[镜像版本号]
    
  • 公有云可以查询到

  • 查看详情