Docker学习笔记(三)

Docker学习笔记(三)
容器的标识符
    docker run --name db --env MYSQL_ROOT_PASSWORD=example -d mariadb
    #--name:为容器指定名称
    #--env:指定变量
    #-d:后台运行容器,并返回容器ID
        #--detach=false:指定容器运行前台还是后台,默认为false

    CONTAINER ID作为容器的唯一标识,默认为128位,一般使用简略形式即前16位。
    #docker ps --no-trunc:可以查看完整的容器ID
    
    通过容器ID管理容器
    docker stop f48d2db645ca    #停止容器运行
    docker start f48d2db645ca    #启动容器
    docker start Docker_name    #也可以使用指定的容器名

    查询容器信息
    docker inspect [options] container|image [container|image]
      #查询容器的所有基本信息,包括运行情况、存储位置、配置参数、网络设置等。
          例:docker inspect Docker_Name
      -f:可以使用Golang的模板来提取指定部分的信息,以JSON的格式展示;
          例:docker inspect -f {{.State.Status}} Docker_Name

    查询日志
    docker logs Docker_Name
      -f:实时打印最新的日志

    实时查看容器所占用的系统资源,如CPU使用率、内存、网络和磁盘开销
    docker stats Docker_Name

容器内部命令
    Docker提供了原生的方式支持登入容器
    格式:docker exec [options] container_name command [arg..]
        参数:-it:以root身份登入容器,以exit退出  
    例:docker exec MywordPress ps -ef
    例:docker exec -it MywordPress /bin/bash
      
多容器管理
    docker run通过“--link”建立容器建的关联。前提是关联容器已经创建并启动运行,多个容器关联时需要考虑启动顺序。
    参数:--link <name or id>:alias:指定荣期间的关联,使用其他容器的IP、env等信息
         -p:指定容器暴露的端口,容器端口:服务端口
    例:docker run --name MyWordPress --link db:mysql -p 8080:80 -d wordpress
    docker run --link容器间的通信方式:设置环境变量、更新/etc/hosts文件
    设置环境变量时,会将link中的别名设置为环境变量;
        格式:<alias>_NAME=/接受容器名/源容器alias
        例:MYSQL_NAME=/MywordPress/mysql    #alias是大写
    同时容器中会创建关于源容器暴露的端口号的环境变量;
        格式:<name>_PORT_<port>_<protocol>    #name=alias;port=源容器暴露端口;protocol=通信协议[tcp/udp]
        例:MYSQL_PORT_3306_TCP=tcp://172.17.0.2:3306
    docker定义了以此为前缀的3个环境变量: <name>_PORT_<port>_<protocol>_ADDR
                      <name>_PORT_<port>_<protocol>_PORT
                      <name>_PORT_<port>_<protocol>_PORTO
        例:MYSQL_PORT_3306_TCP_PORT=3306
           MYSQL_PORT_3306_TCP_ADDR=172.17.0.2
           MYSQL_PORT_3306_TCP_PROTO=tcp
        #暴露多个端口时,一个端口一组,会有多组
    docker定义了值为源容器的URL:<alias>_PORT
        例:MYSQL_PORT=tcp://172.17.0.2:3306   #暴露端口中最小的端口号
    
    关联容器还会获取源容器的暴露的环境变量:源容器Dockerfile中ENV标签设置的环境变量
                     源容器用docker run命令创建中-e或者--env-file设置的环境变量
       格式:<alias>ENV<name>

Docker Compose
    docker提供一个容器编排工具--Docker Compose,允许用户在一个模板(yaml格式)中定义一组相互关联的应用容器,会根据模板中的“--link”等参数,对启动的优先级自动排序,执行“docker-compose up”,就可以依次创建。
    安装:curl -L https://github.com/docker/compose/releases/download/1.6.0/docker-compose-`uname -s`-`uname -m`> /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose
    动手试试:
        1、创建文件并编辑docker-compose.yaml,docker-compose命令指定默认文件名,
       wordpress:            #容器名
          image: wordpress        #定义镜像
          links:            #指定关联容器和关联容器别名
            - db:mysql        
                ports:            #指定暴露的端口和对应服务端口
            - 8080:80
      db:
          image: mariadb
            environment:        #设置环境变量
            MYSQL_ROOT_PASSWORD: example
    2、创建并启动文件中的容器
       docker-compose up        #默认前台运行,ctrl+c退出后容器关闭    #参数:-d:后台运行
        #启动命令:
            docker-compose start    #启动命令,不能创建容器,默认后台运行
            docker-compose stop    #停止命令
    3、容器的删除
       查看所有容器
           docker ps -a        #-a:查看所有容器
       删除容器
        docker rm MyWordPress db
    
    docker-compose的配置文件
    可以将多容器信息写进配置文件,默认文件名docker-compose.yaml,也可以使用“-f”指定配置文件。
    动手试试:
        创建一个gitlab项目,容器:postgresql、redis、gitlab
        一、通过docker run命令实现
        1、创建并启动pg
           docker run --name gitlab-pg -d \
            --env 'DB_NAME=gitlabhq_production' \
            --env 'DB_USER=postgresql' \
            --env 'DB_PASS=password' \
            sameersbn/postgresql:9.4-12        #仓库名/镜像名:镜像标签
        2、创建并启动redis
           docker run -name gitlab-redis -d sameersbn/redis:latest
        3、创建并启动gitlab
           docker run -name gitlab -d \
            --link gitlab-pg:postgresql \
            --link gitlab-redis:redisio \
            --publish 10022:22 \            #--publish和-p同义,指定容器暴露的端口
            --publish 10080:80 \
            --env 'GITLAB_PORT=10080' \
            --env 'GITLAB_SSH_PORT=10022' \
            --env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \
            sameersbn/gitlab:8.4.4
                #docker run命令复杂不易管理

        二、通过docker-compose编排工具安装pg、redis、gitlab
        1、pg的yaml
        gitlab-pg:
          image: sameersbn/postgresql:9.4-12
          environment:
            - DB_USER=gitlab
            - DB_PASS=password
            - DB_NAME=gitlabhq_production
        2、redis的yaml
        gitlab-redis:
          iamge: sameersbn/redis:latest
        3、gitlab的yaml
        gitlab:
          image: sameersbn/gitlab:8.4.4
          link:
            - gitlab-redis: redisio
            - gitlab-pg: postgresql
          ports:
            - "10080:80"
            - "10022:22"
          environment:
            - GITLAB_PORT=10080
            - GITLAB_SSH_PORT=10022
            - GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string
        三、个人博客redmine
        docker run --name=postgresql-redmine -d \
               --env='DB_NAME=redmine_production' \
               --env='DB_USER=redmine' \
               --env='DB_PASS=password' \
               sameersbn/postgresql:9.4-12

        docker run --name=redmine -d \
               --link=postgresql-redmine:postgresql \
               --publish=10083:80 \
               --env='REDMINE_PORT=10083' \
               sameersbn/redmine:3.2.0-4

        yaml配置文件版:
        postgresql-redmine:
            image: sameersbn/postgresql:9.4-12
            environment:
            - DB_NAME=redmine_production
            - DB_USER=redmine
            - DB_PASS=password
        redmine:
            image: sameersbn/redmine:3.2.0-4
            links:
            - postgresql-redmine:postgresql
            ports:
            - "10083:80"
            environment:
            - REDMINE_PORT=10083

posted @ 2020-04-08 21:26  zyxywy  阅读(170)  评论(0编辑  收藏  举报