docker環境構築およびdockerfile作成

11872 ワード

docker環境構築およびdockerfile作成

  • docker構築前準備
  • 1 docker取付
  • 1.1 yumコマンドを使用して古いバージョン
  • をアンインストール
  • 1.2更新yumソースはアリ雲
  • 1.3 docker
  • を取り付ける
  • 1.4 docker
  • を有効にする
  • 1.5 dockerミラー加速
  • 2 dockerfile作成
  • 2.1引き抜きミラー
  • 2.2 dockerfile作成
  • 2.3コンパイルミラー
  • 2.4注意点
  • 2.5起動スクリプトおよび起動コンテナ
  • 2.6容器
  • に入る
  • 後記

  • docker構築前の準備


    まずdockerのドキュメントを見て、dockerミラー、コンテナ、倉庫の基本的な概念を理解することをお勧めします.転載を参照:https://yeasy.gitbooks.io/docker_practice/content/introduction/what.html

    1 dockerインストール


    私がdockerを取り付けた機械はcentos 7です.6の仮想マシンですので、yumを使用してdockerをインストールします.また、権限が足りない場合は、sudoを追加してコマンドの前にコマンドを実行してください.

    1.1 yumコマンドを使用して古いバージョンをアンインストールする

    yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-selinux \
                      docker-engine-selinux \
                      docker-engine
    

    1.2 yumソースをアリクラウドに更新


    ネットワークの問題で、海外にアクセスするyumソースのネットワーク速度が理想的ではないため、まず国内yumソースに更新します.
    #  wget  
    yum -y install wget
    #  aliyun yum ,      
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    #  mirrors.cloud.aliyuncs.com     (         )
    sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
    #  yum  
    yum makecache
    yum -y update
    

    1.3 dockerのインストール

    #      
    yum install -y yum-utils \
               device-mapper-persistent-data \
               lvm2
    #   docker-ce
    yum makecache fast #         ,       
    yum install docker-ce
    

    1.4 dockerの有効化

    #  docker   
    systemctl enable docker
    systemctl start docker
    #  doucker   ,       docker   
    groupadd docker
    usermod -aG docker $USER
    

    Dockerが正しくインストールされているかどうかをテストします
     docker run hello-world
    
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    d1725b59e92d: Pull complete
    Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
        (amd64)
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you are currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    
    Share images, automate workflows, and more with a free Docker ID:
     https://hub.docker.com/
    
    For more examples and ideas, visit:
     https://docs.docker.com/get-started/
    

    以上の情報を正常に出力できれば、インストールに成功したことを示します.

    1.5 dockerミラー加速


    私が選んだのはアリ雲のミラー加速です
    mkdir -p /etc/docker
    tee /etc/docker/daemon.json <<-'EOF'
    {
         
      "registry-mirrors": ["https://cnr3t036.mirror.aliyuncs.com"]
    }
    EOF
    systemctl daemon-reload
    systemctl restart docker
    

    2 dockerfile作成


    dockerfileを作成する前に、どのミラーに基づいて完璧なミラーを豊富にしているかを確認する必要があります.一般的には、空のミラー、centos、ubuntuなどを選択することができます.ここで私が選んだのはcentosです.

    2.1ミラーのプル


    コマンドとパラメータ:docker pull[オプション][Docker Registryアドレス[:ポート番号]/]倉庫名[:ラベル].ミラーアクセラレータを構成し、ミラーウェアハウスに既存のミラーを使用するため、アドレスポートに転送することなく、ミラーを直接引き出すことができます.pullの前に、searchコマンドでミラーが存在するかどうかを検索することもできます.
    #    
    docker  search  centos
    #    
    docker pull centos:latest
    #    
    docker images #    
    docker images centos #    
    #    
    docker image rm centos
    #     
    docker rmi centos 
    

    2.2 dockerfile作成


    centosミラーを引いた後、jdk、tomcat、nginxをインストールし、実際のマシンをマウントするディレクトリ(出力ログ、htmlの保存、warパッケージなど)を設定し、ポートマッピングを設定するなど、具体的なスクリプトを書かずにデバッグプロセスを作成します.以下を参照してください.https://yeasy.gitbooks.io/docker_practice/content/image/build.html自分で完成したdockerfileを差し上げます.
    #    
    FROM centos:latest
    #  
    MAINTAINER crazy_moore
    
    #      
    ENV JAVA_HOME /usr/lib/jvm/java
    ENV CATALINA_HOME /usr/local/soft/tomcat/apache-tomcat-9.0.24
    ENV PATH /usr/local/nginx/sbin:$PATH:$CATALINA_HOME/bin:$JAVA_HOME/bin
    
    #   run  
    #  yum 
    RUN yum -y install wget \
        && wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo \
        && sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo \
        && yum makecache \
        && yum -y update \
        #        
        && mkdir -p /docker_init_tmp/ \
        && cd /docker_init_tmp/ \
        #  jdk/nginx/tomcat
        && wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.24/bin/apache-tomcat-9.0.24.tar.gz \
        && wget http://nginx.org/download/nginx-1.17.3.tar.gz \
        #   JDK
        && yum -y install java-1.8.0-openjdk-devel \
        #   tomcat
        && mkdir -p /usr/local/soft/tomcat \
        && tar xzf /docker_init_tmp/apache-tomcat-9.0.24.tar.gz -C /usr/local/soft/tomcat \
        #   nginx
        && mkdir -p /usr/local/soft/nginx \
        && tar xzf /docker_init_tmp/nginx-1.17.3.tar.gz -C /usr/local/soft/nginx  \
        && yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel \
        && yum install -y libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel \
        && useradd -M -s /sbin/nologin nginx \
        && cd /usr/local/soft/nginx/nginx-1.17.3/ \
        && ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module \
        && make \
        && make install \
        #    
        && echo "Asia/Shanghai" > /etc/timezone \
        #       
        && rm -rf /docker_init_tmp
    
    #        
    EXPOSE 80
    EXPOSE 8085
    #      ,    (   )        。
    WORKDIR /app/scripts/
    CMD ["./start.sh"]
    

    2.3ミラーのコンパイル


    コンパイルコマンド
    docker build -t kuoxu_centos:0.0.1 .
    

    コンパイルに問題がある場合は、ヒントに基づいてスクリプトに存在する問題を解決できます.また、コンパイルに失敗したり、不要なミラー、コンテナのクリーンアップコマンドは次のとおりです.
    #      
    docker images
    #      
    docker container ls
    #           
    docker container prune 
    #      
    docker container rm [    |  id]
    #    
    docker rmi [  id|    ]
    docker image rm [  id|    ] 
    

    2.4注意点

  • dockerfileの各コマンドはミラーリング(前の結果の保存)を確立するので、ミラーファイルのサイズと内部論理の明確さを減らすためにdockerコマンドを簡略化することをお勧めします.
  • ミラーでは、複数の異なるサービス(tomcat、nginxなど)を起動する必要がある場合は、shスクリプトに書くことをお勧めし、CMDでこのshスクリプトを実行するよう指定すればよい.
  • dockerfileの起動には必ずデーモンスレッドを設定しなければなりません.そうしないと、コンテナがコマンドを実行し終わると自動的に閉じます.

  • 2.5起動スクリプトと起動コンテナ


    起動する前に、実際のマシン上の対応ディレクトリを確立し、後続のプロファイル、起動スクリプトを対応ディレクトリに保存すればいいです.
    mkdir -p /logs/nginx /logs/tomcat /web/tomcat /web/html /web/resources /app/scripts
    

    起動スクリプト:
    #!/bin/sh
    #      
    rm /usr/local/soft/tomcat/apache-tomcat-9.0.24/conf/server.xml
    cp -r /app/scripts/server.xml /usr/local/soft/tomcat/apache-tomcat-9.0.24/conf/
    cp -r /app/scripts/nginx.conf /usr/local/nginx/conf/
    #  tomcat
    /usr/local/soft/tomcat/apache-tomcat-9.0.24/bin/startup.sh
    #  nginx
    nginx -g "daemon off;"
    

    起動スクリプトの内容はこれらです.中のnginxです.confとtomcatのserver.xmlはみんな自分のものでいいです.
    コンテナの起動:
    docker run -itd --name kuoxu_centos1 -p 8080:8085 \
     -p 80:80 \
     -v /logs/nginx:/var/log/nginx \
     -v /logs/tomcat:/usr/local/soft/tomcat/apache-tomcat-9.0.24/logs \
     -v /web/html:/web/html \
     -v /web/tomcat:/web/tomcat \
     -v /web/resources:/web/resources  \
     -v /app/scripts:/app/scripts  \
     kuoxu_centos:0.0.1 
    

    コンテナが起動すると、docker container lsで起動状態を表示できます.対応するデータがない場合は、コンテナの起動に失敗したか、コンテナの起動が実行された後に自動的に停止したことを示します(デーモンスレッド).次のコマンドでログを表示できます.エラーログがない場合は、コンテナの起動後に自動的に停止する可能性があります.
    docker logs -f -t --tail=100 kuoxu_centos1
    

    エラーログがある場合は、プロンプトに従って問題を解決します(runパラメータの修正、起動スクリプトの調整、dockerfileなど).問題がdockerfileスクリプトで発生した場合は、再buildが必要です.

    2.6容器に入る

    #  bash          ,          id   
    docker exec -it kuoxu_centos1 bash
    #   ,            ,       
    #[root@d01b40d8abd4 scripts]
    #       
    exit
    

    後記


    ここまで、dockerの環境構築とdockerfileの作成は基本的に完了しました.問題があれば、伝言を歓迎します.