zoukankan      html  css  js  c++  java
  • CentOS7 上学习使用docker

    一.CentOS7(64)上安装和使用docker的笔记。

    1. 增加docker用户

    sudo groupadd docker
    sudo useradd -g docker docker

    2. 增加centos7 的国内源

    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    yum makecache

    3. 更新系统

    sudo yum update

    4. 安装docker

    yum install docker

    5.启动docker

    (1)启动,systemctl start docker.service
    (2)开机启动,systemctl enable docker.service
    (3)帮助,docker --help
    (4)概要信息,docker info
    (5)镜像查看,docker images
    (6)容器查看,即进程查看,docker ps -a
    

      

    6. 测试安装nginx

    (1)下载镜像,docker pull nginx
    (2)启动容器,docker run -d -p 8080:80 nginx,把容器内的nginx的80端口,映射到当前服务器的8080端口,当前服务器的ip是192.168.1.120,浏览器输入http://192.168.1.120:8080/,就可以看到nginx已启动,
    (3)再启动多一个容器,docker run -d -p 8081:80 nginx,浏览器输入http://192.168.1.120:8081/,就可以看到另外一个nginx已启动
    也可以通过curl 127.0.0.1:8080 来测试是否打开相应端口
    (4)到这里就能体现出Docker部署应用和传统部署应用的区别了,传统部署的话,需要人工拷贝多一份nginx,再配置端口,而Docker部署的话,在已制作好的镜像基础上,一条命令就可以部署一个新的应用

    7.删除测试的nginx容器

    (1)docker ps -a
    可以显示容器id
    停止容器
    (2)docker stop 8dc6a2b6f903
    删除容器
    (3)docker rm 8dc6a2b6f903

    8. 指定容器nginx的参数

    docker run --name nginx-001 -d -p 8080:80 -v /home/docker/nginx/html:/usr/share/nginx/html nginx

    -p 参数是把 宿主的8080端口映射到容器的80端口 
    这里要注意-v是数据卷,可以主机和容器之间共享/home/docker/nginx/html这个目录,在容器里面就是/usr/share/nginx/html。其实这就是我们的代码目录,调试代码就是靠共享目录实现的,很方便!!

    9.修改容器里面的配置文件

    #进入容器
    $docker exec -it nginx-001 bash
    #安装工具
    apt-get update
    apt-get install vim
    #查看和修改nginx的配置信息
    vim /etc/nginx/conf.d/default.conf

    修复网页访问403错误

    由于在容器里面 nginx配置的web根目录是 /usr/share/nginx/html ,对应到系统的目录是/home/docker/nginx/html 。 会有权限的问题。
    这个实现需要关闭SELinux重新发布一次
    vim /etc/selinux/config 
    将SELINUX=enforcing改为SELINUX=disabled
    然后重启
    删除原来的容器,重新发布一下容器。
    访问

    10.保存自己的contianer

    保存对容器的修改

    当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。docker中保存状态的过程称之为committing,它保存的新旧状态之间的区别,从而产生一个新的版本。 
    目标:

    首先使用docker ps -l命令获得安装完ping命令之后容器的id。然后把这个镜像保存为learn/ping。 
    提示:

    1. 运行docker commit,可以查看该命令的参数列表。
    2. 你需要指定要提交保存容器的ID。(译者按:通过docker ps -l 命令获得)
    3. 无需拷贝完整的id,通常来讲最开始的三至四个字母即可区分。(译者按:非常类似git里面的版本号) 
      正确的命令:

    $docker commit 2251e3fac654 meerkat/nginx-001 
    然后通过docker images 可以查看 container 保存成的image

    这里写图片描述

    11.把当前的image 复制成另外一个容器

    $docker run --name nginx-001 -d -p 10080:80 -v /home/docker/nginx:/usr/share/nginx meerkat/nginx
    启动原来的容器
    $docker run --name nginx-002 -d -p 10081:80 -v /home/docker/nginx:/usr/share/nginx meerkat/nginx

    这个时候访问 宿主的ip 和端口 
    http://192.168.1.120:10080 
    http://192.168.1.120:10081 
    由于在nginx的容器里面 nginx的配置文件(/etc/nginx/conf.d/default.conf)里面设置的

     location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }

    访问url指向的是 /usr/share/nginx/html目录 
    而启动容器的时候指定这个容器的/usr/share/nginx目录是指向宿主的/home/docker/nginx目录,所以浏览器 
    都是显示宿主机器上/home/docker/nginx/html里面的index.html的内容

    12. 容器自动重启

    使用在docker run的时候使用–restart参数来设置。 
    no - container:不重启 
    on-failure - container:退出状态非0时重启 
    always:始终重启 
    所以 11 节的启动命令修改成:

    $docker run --name nginx-001 -d -p 10080:80 -v /home/docker/nginx:/usr/share/nginx --restart=always meerkat/nginx
    $docker run --name nginx-002 -d -p 10081:80 -v /home/docker/nginx:/usr/share/nginx --restart=always meerkat/nginx
    # 查看重启docker 是否容器可以重启
    #systemctl restart docker 
    #docker ps -a 
    确定容器重新启动成功
    [root@meerkat-docker docker]# systemctl start docker
    [root@meerkat-docker docker]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                           NAMES
    f22e93cba355        meerkat/nginx       "nginx -g 'daemon off"   About a minute ago   Up 2 seconds        443/tcp, 0.0.0.0:10081->80/tcp   nginx-002
    255d77c725d0        meerkat/nginx       "nginx -g 'daemon off"   About a minute ago   Up 2 seconds        443/tcp, 0.0.0.0:10080->80/tcp   nginx-001

    二. 安装mysql 的过程

    1. 安装mysql 最新版本的image

    可以在https://hub.docker.com/上查找。 
    也可以用行命令查找

    #查看docker hub 上查看mysql image 信息
    $docker search mysql
    $docker pull mysql
    $docker run --name mysql-master-001 -d -p 13306:3306  -e MYSQL_ROOT_PASSWORD=root-password --restart=always mysql
    #通过navicate等客户端可以连接这个mysql
    #进入容器进行设置
    $docker exec -it mysql-master-001 bash
    #保存容器
    $docker commit mysql-master-001 meerkat/mysql-master-001
    #停止当前的mysql-master-001容器。然后就可以删除原来的mysql image
    #然后重新以meerkat/mysql-master-001的image 启动容器mysql-master-001
    $docker run --name mysql-master-001 -d -p 13306:3306  -e MYSQL_ROOT_PASSWORD=root-password --restart=always meerkat/mysql-master-001

    三.安装tomcat 集群

    1.使用自己编写的Dockerfile来定制tomcat 容器

    使用oracle 的 java 8 , tomcat 8.0 的最新版本。tomcat支持apr(未成功)

    #使用cogniteev/oracle-java:java8这个image才是oralce jdk。否则是open jdk
    #FROM java:8-jre
    FROM cogniteev/oracle-java:java8
    
    ENV CATALINA_HOME /usr/local/tomcat
    ENV PATH $CATALINA_HOME/bin:$PATH
    RUN mkdir -p "$CATALINA_HOME"
    WORKDIR $CATALINA_HOME
    
    # let "Tomcat Native" live somewhere isolated
    ENV TOMCAT_NATIVE_LIBDIR $CATALINA_HOME/native-jni-lib
    ENV LD_LIBRARY_PATH ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$TOMCAT_NATIVE_LIBDIR
    
    # runtime dependencies for Tomcat Native Libraries
    # Tomcat Native 1.2+ requires a newer version of OpenSSL than debian:jessie has available (1.0.2g+)
    # see http://tomcat.10.x6.nabble.com/VOTE-Release-Apache-Tomcat-8-0-32-tp5046007p5046024.html (and following discussion)
    ENV OPENSSL_VERSION 1.0.2h-1
    RUN { 
            echo 'deb http://httpredir.debian.org/debian unstable main'; 
        } > /etc/apt/sources.list.d/unstable.list 
        && { 
    # add a negative "Pin-Priority" so that we never ever get packages from unstable unless we explicitly request them
            echo 'Package: *'; 
            echo 'Pin: release a=unstable'; 
            echo 'Pin-Priority: -10'; 
            echo; 
    # except OpenSSL, which is the reason we're here
            echo 'Package: openssl libssl*'; 
            echo "Pin: version $OPENSSL_VERSION"; 
            echo 'Pin-Priority: 990'; 
        } > /etc/apt/preferences.d/unstable-openssl
    RUN apt-get update && apt-get install -y --no-install-recommends 
            libapr1 
            openssl="$OPENSSL_VERSION" 
        && rm -rf /var/lib/apt/lists/*
    
    # see https://www.apache.org/dist/tomcat/tomcat-8/KEYS
    RUN set -ex 
        && for key in 
            05AB33110949707C93A279E3D3EFE6B686867BA6 
            07E48665A34DCAFAE522E5E6266191C37C037D42 
            47309207D818FFD8DCD3F83F1931D684307A10A5 
            541FBE7D8F78B25E055DDEE13C370389288584E7 
            61B832AC2F1C5A90F0F9B00A1C506407564C17A3 
            713DA88BE50911535FE716F5208B0AB1D63011C7 
            79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 
            9BA44C2621385CB966EBA586F72C284D731FABEE 
            A27677289986DB50844682F8ACB77FC2E86E29AC 
            A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 
            DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 
            F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE 
            F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23 
        ; do 
            gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; 
        done
    
    ENV TOMCAT_MAJOR 8
    ENV TOMCAT_VERSION 8.0.36
    ENV TOMCAT_TGZ_URL https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz
    
    RUN set -x 
        
        && wget -O tomcat.tar.gz "$TOMCAT_TGZ_URL" 
        && wget -O tomcat.tar.gz.asc "$TOMCAT_TGZ_URL.asc" 
        && gpg --batch --verify tomcat.tar.gz.asc tomcat.tar.gz 
        && tar -xvf tomcat.tar.gz --strip-components=1 
        && rm bin/*.bat 
        && rm tomcat.tar.gz* 
        
        && nativeBuildDir="$(mktemp -d)" 
        && tar -xvf bin/tomcat-native.tar.gz -C "$nativeBuildDir" --strip-components=1 
        && nativeBuildDeps=" 
            gcc 
            libapr1-dev 
            libssl-dev 
            make 
            openjdk-${JAVA_VERSION%%[-~bu]*}-jdk=$JAVA_DEBIAN_VERSION 
        " 
        && apt-get update && apt-get install -y --no-install-recommends $nativeBuildDeps && rm -rf /var/lib/apt/lists/* 
        && ( 
            export CATALINA_HOME="$PWD" 
            && cd "$nativeBuildDir/native" 
            && ./configure 
                --libdir="$TOMCAT_NATIVE_LIBDIR" 
                --prefix="$CATALINA_HOME" 
                --with-apr="$(which apr-1-config)" 
                --with-java-home="$(docker-java-home)" 
                --with-ssl=yes 
            && make -j$(nproc) 
            && make install 
        ) 
        && apt-get purge -y --auto-remove $nativeBuildDeps 
        && rm -rf "$nativeBuildDir" 
        && rm bin/tomcat-native.tar.gz
    
    # verify Tomcat Native is working properly
    RUN set -e 
        && nativeLines="$(catalina.sh configtest 2>&1)" 
        && nativeLines="$(echo "$nativeLines" | grep 'Apache Tomcat Native')" 
        && nativeLines="$(echo "$nativeLines" | sort -u)" 
        && if ! echo "$nativeLines" | grep 'INFO: Loaded APR based Apache Tomcat Native library' >&2; then 
            echo >&2 "$nativeLines"; 
            exit 1; 
        fi
    
    EXPOSE 8080
    CMD ["catalina.sh", "run"]
    

      

    2.或者从现成的hub上tomcat 的image 进行改造

    由于版权的关系,只找到用open jdk 来配置的tomat

    a. copy需要在image中需要定制的tomcat的配置文件到当前目录

    server.xml 
    • 1

    b. 编辑 Dockerfile

    FROM tomcat:8.0.36-jre8
    MAINTAINER "roamer <roamerxv@gmail.com>"
    #自定义的配置文件,以替换原有image中的配置文件
    ADD server.xml /usr/local/tomcat/conf/
    ADD tomcat-users.xml /usr/local/tomcat/conf/
    ADD probe.war /usr/local/tomcat/webapps/
    RUN apt-get update && apt-get install vim -y

    3.编译生成本地命名为meerkat/tomcat的image

    docker build -t meerkat/tomcat .

    4.根据这个image生成,并且启动2个 container

    $docker run --name tomcat-001 -d -p 18081:8080 -v /opt/meerkat:/opt/meerkat -v /home/docker/tomcat/tomcat-001-logs:/usr/local/tomcat/logs --restart=always  meerkat/tomcat
    
    $docker run --name tomcat-002 -d -p 18082:8080 -v /opt/meerkat:/opt/meerkat -v /home/docker/tomcat/tomcat-002-logs:/usr/local/tomcat/logs --restart=always  meerkat/tomcat

    四.安装nginx和tomcat的动静分离

    1.通过Dockerfile来生成自己的nginx image

    $cd /home/docker/nginx
    把nginx和tomcat做动静分离需要的配置文件复制到当前目录
    nginx.conf 
    编辑Dockerfile文件
    FROM nginx
    MAINTAINER "roamer <roamerxv@gmail.com>"
    #自定义的配置文件,以替换原有image中的配置文件
    ADD nginx.conf /etc/nginx
    RUN apt-get update && apt-get install vim -y

    2.生成nginx 容器

    docker run --name nginx -d -p 80:80 -v /opt/meerkat:/opt/meerkat -v /home/docker/nginx/logs:/var/log/nginx --restart=always  meerkat/nginx
    #这里的2个-v 共享卷 是用于配置web应用目录和日志输出目录
    版权声明:本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    中文词语的语法划分
    程序员转行可以做什么?
    Linux Crontab 定时任务 命令详解
    Spring对AOP的支持
    ASP.NET 2.0 Web Part编程入门
    linux ramdom hung up
    VLC plugin加载代码分析
    mac上的ssh proxy客户端 iSSH个人修改版
    关于MP4 fileformat中 duration及timescale相关的几个地方
    inline 小结
  • 原文地址:https://www.cnblogs.com/hyh123/p/8571803.html
Copyright © 2011-2022 走看看