• docker专题 从入门到放弃


    1、docker是什么

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。【百度百科】

    2、docker怎么安装

    2.1、在线安装

    curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

    或者
    curl -sSL https://get.daocloud.io/docker | sh

    2.2、离线安装

    先选择合适的安装包,下载地址是:

    https://download.docker.com/linux/static/stable/x86_64/

    然后按以下操作进行

    tar xzf docker-20.10.9.tgz

    cp docker/* /usr/bin/

    cp docker.service /etc/systemd/system/

    赋执行权限

    chmod +x /etc/systemd/system/docker.service

    systemctl daemon-reload

    #开机启动

    systemctl enable docker.service

    启动docker

    systemctl start docker

    2.3、检查

           Docker -v

           显示如下信息则正常

           Docker version 20.10.9, build c2ea9bc

    3、docker 安装redis

        3.1、在线安装

    从镜像仓库获取需要安装的版本,网址是:

           https://hub.docker.com/

    默认可以用docker pull redis直接拉镜像,拉取的版本是默认latest,同docker pull redis:latest,也可以选择具体的版本,比如现在redis的稳定版本是6.2.6,那么就可以用docker pull redis:6.2.6-alpine

    用docker images -a展示所有已拉取镜像

    镜像正常展示,则说明镜像拉取成功。

    3.2、启动redis

    3.2.1、先写语句

           docker run --name redis -p 6389:6379 \

    -v /mnt/tools/redis/redis.conf:/etc/redis/redis.conf \

    -v /mnt/tools/redis/data:/data \

    -d 2cb539a9d29e \

    redis-server /etc/redis/redis.conf \

    --appendonly yes

    3.2.2解释:   

    docker run   docker启动容器命令

                  -- name redis 给启动的容器自定义一个名字 可以随意自定义

                  -p 6389:6379 将容器6379端口映射到宿主机服务器的6399上

                  -v /mnt/tools/redis/redis.conf:/etc/redis/redis.conf 将宿主机目录上的文件或者文件夹映射到容器指定路径上,两者是复制关系,这样就可以修改宿主机相应文件夹下的文件,docker会自动同步到容器中去,同理,容器中日志等信息会自动同步到宿主机上。

                  -d 2cb539a9d29e 拉取的镜像id,可以通过上一步获取。

                  redis-server /etc/redis/redis.conf  指定redis的启动方式,也可以不指定

                  appendonly yes   开启redis持久化

    3.2.3 注意事项:

           按各服务器要求,修改redis.conf,修改端口(其实没必要修改端口,因为每次从镜像中启动一个容器,6379肯定不会被占用),修改密码,修改bind(bind不能指定127.0.0.1,如果指定127.0.0.1则表明只能容器内用,宿主机用不了,所以需要bind宿主机内网ip)

    3.3、运维

    3.3.1 先写语句

                  docker exec -it redis bash   进入容器

                  docker stop redis                停止容器

                  docker start redis                启动容器

                  docker restart redis             重启容器

                  docker rm redis                   删除容器

                  rocker rmi 2cb539a9d29e     删除redis镜像

    3.3.2 解释

                  docker exec -it  固定进入容器语句

                  redis 启动时自定义的容器名称,或者可以通过docker ps -a 查找相应的容器,获取容器的id: CONTAINER ID

                  bash  也可以写/bin/bash 固定语句

    3.3.3 运维

                  进入后会发现容器目录结构类似一个新的centos服务器,此时 用redis-cli 命令就可以进入,之后的操作跟centos操作相同

    4、打离线安装镜像,用于离线安装

         4.1 将运行中的容器打成镜像

                  docker commit 37e6c9bd2cdf redis-6.2.6

                  解释

                  docker commit     固定语句

                  37e6c9bd2cdf        通过docker ps -a 查找相应的容器,获取容器的id

    redis-6.2.6            镜像名称,可以自定义,最好带版本号,因为打出的镜像默认是latest版本的

         4.2 将镜像打成文件,进行存储

                  docker save redis-6.2.6 >/mnt/ redis-6.2.6.tar

                  解释:

                         docker save 固定语句

                         redis-6.2.6     4.1步骤中保存的镜像名

                         >/mnt/ redis-6.2.6.tar   输出到mnt下redis-6.2.6.tar 文件中

    5、离线安装

           docker load </mnt/ redis-6.2.6.tar

    6、注意事项

           docker 默认启动时间是0时区,所以启动时需要在启动文件中添加 -e TZ=Asia/Shanghai,也可以第一次设置后,将设置好启动的容器按照3.4、3.5步骤封装自己的镜像。

    4、docker 安装nginx

    4.1 在线安装

           步骤同3.1

    4.2 启动nginx

         4.2.1先写语句

           docker run --name nginx -p 80:80\

           -v /mnt/tools/nginx/nginx.conf:/etc/nginx/nginx.conf \

           -v /mnt/tools/nginx/logs:/var/log/nginx \

           -v /mnt/workspace/PFMresource:/workspace/PFMresource \

           -v /mnt/workspace/Wecredo-PFM-SD-UI:/workspace/Wecredo-PFM-SD-UI \

           -v /mnt/workspace/Wecredo-PFM-UI-MH-BAODING:/workspace/Wecredo-PFM-UI-MH-BAODING \

           -d b65fb7f3a43a

         4.2.2 解释

           其他同3.2.2,特别注意以下

           -v /mnt/workspace/PFMresource:/workspace/PFMresource \

           -v /mnt/workspace/Wecredo-PFM-SD-UI:/workspace/Wecredo-PFM-SD-UI \

           -v /mnt/workspace/Wecredo-PFM-UI-MH-BAODING:/workspace/Wecredo-PFM-UI-MH-BAODING \

           Nginx请求的地址都是本地地址,所以需要将宿主机的目录映射到容器内,让容器可以请求到

    4.3 运维

           同3.3

    4.4 注释事项

           同注意时区问题

    5、docker 安装mysql

    5.1 在线安装

           步骤同3.1

    5.2 启动mysql

    5.2.1先写语句

           docker run -p 3306:3306 --name mysql \

    -v /mnt/tools/mysql/logs:/var/log/mysql \

    -v /mnt/tools/mysql/data:/var/lib/mysql \

    -e MYSQL_ROOT_PASSWORD=@wecredo2022 \

    -d a3b66c794c2a

    5.2.2 解释

           其他同3.2.2,特别注意以下:-e MYSQL_ROOT_PASSWORD=@wecredo2022,设置root密码

    5.3 运维

           同3.3

           初始创建数据库时需要将数据库文件docker cp到容器内,然后容器内登录mysql后source /stanfard.sql

    5.4 注释事项

           因为容器中没有编辑器,所以要么安装,要么将容器文件复制到本机进行修改,然后复制回去,复制语句docker cp mysqld.cnf mysql:/etc/mysql/mysql.conf.d/mysqld.cnf,

           综合以下问题,结论是最好搭建自己的镜像。

           特别提醒,同一mysql镜像启动容器时,宿主机数据目录不能相同,会互相冲突。

           特别提醒,如果删除容器,而不主动删除宿主机数据文件,那么重新生成容器并指定该宿主机文件时,会自动把前一个容器的数据同步到新容器中。

    5.4.1 时区不对

     可以在启动项里面加入-e TZ="Asia/Shanghai"

    5.4.2 大小写敏感

     可以在容器中/etc/mysql/mysql.conf.d/mysqld.cnf中添加 lower_case_table_names=1

    5.4.3 中文乱码

     可以在容器中/etc/mysql/mysql.conf.d/mysqld.cnf中添加

     

    [mysqld]

    character-set-server=utf8

    character_set_server=utf8

    init_connect=’SET NAMES utf8’

    [mysql]

    default-character-set = utf8

     

    [mysql.server]

    default-character-set = utf8

     

    [mysqld_safe]

    default-character-set = utf8

     

    [client]

    default-character-set = utf8

     

    5.4.4控制台不能输入中文

    可以在启动项中添加 -e LANG=C.UTF-8

    5.4.5 this is incompatible with sql_mode = only_full_group_by问题

    可以在容器中/etc/mysql/mysql.conf.d/mysqld.cnf中添加

    [mysqld]

    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    5.4.6 /etc/mysql/mysql.conf.d/mysqld.cnf完整内容如下

    [mysqld]

    pid-file    = /var/run/mysqld/mysqld.pid

    socket        = /var/run/mysqld/mysqld.sock

    datadir        = /var/lib/mysql

    symbolic-links=0

    character-set-server=utf8

    lower_case_table_names=1

    character_set_server=utf8

    init_connect=’SET NAMES utf8’

    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    [mysql]

    default-character-set = utf8

     

    [mysql.server]

    default-character-set = utf8

     

    [mysqld_safe]

    default-character-set = utf8

     

    [client]

    default-character-set = utf8

     

     6、docker 安装tomcat

    6.1 在线安装

           步骤同3.1

    6.2 启动tomcat

    6.2.1先写语句

           docker run --name tomcat -p 8081:8080 \

    -v /mnt/workspace/logs/:/usr/local/logs/ \

    -v /mnt/workspace/tomcat-mh/logs/:/usr/local/tomcat/logs/ \

    -v /mnt/workspace/tomcat-mh/war/Wecredo-PFM-SD:/usr/local/tomcat/webapps/Wecredo-PFM-SD \

    -v /mnt/workspace/tomcat-mh/conf/server.xml:/usr/local/tomcat/conf/server.xml \

    -v /mnt/workspace/PFMresource:/workspace/PFMresource \

    -d 693c8f78d52a /usr/local/tomcat/bin/startup.sh

    6.2.2 解释

           其他同3.2.2,特别注意以下

           /usr/local/tomcat/bin/startup.sh 指定tomcat启动方式,如果不指定会以默认方式启动,不会输出catalina.out文件

    6.3 运维

           同3.3

    6.4 注释事项

           综合以下原因,建议打出适用于自己的镜像

         6.4.1 上传文件权限问题

                   catalina.sh 修改  UMASK="0002"   设置tomcat上传文件权限

                  建议将容器中的catalina.sh docker cp到本地,修改后重新cp回去,然后docker restart tomcat,或者启动时-v 指定catalina.sh 映射文件

         6.4.2 时区问题

                   -e TZ="Asia/Shanghai"

         6.4.3 startup.sh启动启动报错

                  catalina.sh 修改   "$CATALINA_OUT" 2>&1 "&"  修改为 "$CATALINA_OUT" 2>&1  一共两处,用于startup.sh启动

                  建议将容器中的catalina.sh docker cp到本地,修改后重新cp回去,然后docker restart tomcat,或者启动时-v 指定catalina.sh 映射文件

     7、docker-compose

        7.1先安装docker,然后安装docker-compose

    sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /mnt/docker-compose

    赋权

    chmod +x /mnt/docker-compose

    7.2检查

    ./docker-compose –version

    7.3 在 jar 包所在路径创建 Dockerfile 文件,添加以下内容

           FROM java:8

    VOLUME /tmp

    ADD demo-0.0.1-SNAPSHOT.jar app.jar

    RUN bash -c 'touch /app.jar'

    EXPOSE 9000

    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]

    此文件指定了jdk版本是8 指定了将jar包命名为app.jar 并指明了启动方式

    7.4 构建docker-compose.yml文件

           version: '2'     # 表示该 Docker-Compose 文件使用的是 Version 2 file  2和3是有语法区别的

    services:

      nginx:

        image: nginx:1.16.1

        ports:

          - 80:80

          - 443:443

        privileged: true

        restart: always

        volumes:

          - /mnt/tools/nginx/conf/nginx.conf:/etc/nginx/nginx.conf

          - /mnt/tools/nginx/conf/keys:/etc/nginx/keys

          - /mnt/tools/nginx/conf/conf.d:/etc/nginx/conf.d

          - /mnt/tools/nginx/www:/usr/share/nginx/html

          - /mnt/tools/nginx/logs:/var/log/nginx

      redis:

        image: redis:5.0

        privileged: true

        restart: always

        ports:

          - 6379:6379

        volumes:

          - /mnt/tools/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf

          - /mnt/tools/redis/data:/data

        command:

          # 以配置文件的方式启动 redis.conf

          redis-server /usr/local/etc/redis/redis.conf

      demo:                      # 指定服务名称

        build: .                  # 指定 Dockerfile 所在路径,如果就在当前路径下则可以为空

        restart: always

        ports:                    # 指定端口映射

          - 8080:8080

        depends_on:         # 指定依赖服务

          - nginx

          - redis

    7.5 启动

           /mnt/docker/docker-compose up

    7.6运维

           可以用docker stop等命令运维

           也可以用

    ./docker-compose ps -a   查看容器

                  ./docker-compose kill demo 干掉某个容器

           等等

    8写在最后

    因为用到了,所以才去捋,docker-compose确实不怎么用,所以没有过多的研究,欢迎补充完善。

  • 相关阅读:
    *****Exercise 4.1 Generate a multiplication table
    Exercise 3.4 A calculator that allows multiple calculations
    Exercise 3.3 Calculate a discounted price
    Exercise 3.2 Display a date
    理解Java异常处理机制
    eclipse远程Debug配置
    [转]java代码性能优化总结
    [转]A星寻路算法
    JVM参数配置
    Gradle笔记(1) 安装
  • 原文地址:https://www.cnblogs.com/xiufengd/p/16073206.html
Copyright © 2020-2023  润新知