博客專欄

        EEPW首頁 > 博客 > 實用干貨分享(2) - Docker使用操作指南

        實用干貨分享(2) - Docker使用操作指南

        發布人:中電金信人 時間:2022-06-05 來源:工程師 發布文章
        實用干貨分享(2) - Docker使用操作指南


        一、Docker安裝部署


        1. 安裝倉庫


        執行以下命令,安裝Docker所需的包。其中yum-utils提供yum-config-manager工具;
        device-mapper-persistent-data及lvm2則是devicemapper存儲驅動所需的包。

        sudo yum install -y yum-utils device-mapper-persistent-data lvm2


        執行如下命令,安裝stable倉庫。必須安裝stable倉庫,即使你想安裝edge或test倉庫中的Docker構建版本。

        sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo


        [可選]執行如下命令,啟用edge及test倉庫。edge/test倉庫其實也包含在了docker.repo 文件中,但默認是禁用的,可使用以下命令來啟用。

        sudo yum-config-manager --enable docker-ce-edge # 啟用edge倉庫
        sudo yum-config-manager --enable docker-ce-test # 啟用test倉庫


        如需再次禁用,可加上--disable 標簽。例如:執行如下命令即可禁用edge倉庫。

        sudo yum-config-manager --disable docker-ce-edge


        2. 安裝Docker CE


        執行以下命令,更新yum的包索引

        sudo yum makecache fast


        執行如下命令即可安裝最新版本的Docker CE

        sudo yum install docker-ce


        在生產環境中,可能需要指定想要安裝的版本,此時可使用如下命令列出當前可用的Docker版本。

        yum list docker-ce.x86_64 --showduplicates | sort -r


        可使用如下命令,安裝想要安裝的Docker CE版本。

        sudo yum install docker-ce-


        啟動Docker

        Sudo systemctl start docker


        這樣,Docker將會下載測試鏡像,并使用該鏡像啟動一個容器。如果能夠看到類似如下的輸出,則說明安裝成功。(時間較長)

        實用干貨分享(2) - Docker使用操作指南


        二、Docker操作的基本命令


        啟動Docker:sudo systemctl start docker


        Docker鏡像導入:docker load < 鏡像包名(一般格式為tar.gz)


        Docker鏡像導出:docker save 鏡像名 > 鏡像所要打成的包名(一般格式為tar.gz)


        Docker鏡像查看:docker images

        實用干貨分享(2) - Docker使用操作指南


        查看已經啟動的Docker容器:docker ps

        實用干貨分享(2) - Docker使用操作指南


        查看所有Docker容器:docker ps -a

        實用干貨分享(2) - Docker使用操作指南


        下載Docker鏡像: docker pull 鏡像名稱(可以到鏡像倉庫查詢)


        創建鏡像:docker build -t 鏡像名稱(自定):版本號(自定) . 執行此命令前必須先寫好Dockerfile文件,創建鏡像命令要在Dockerfile所在目錄執行,不要忘記版本號后加空格和點。


        停止Docker容器:docker stop 容器名(或容器id)


        刪除Docker容器:docker rm 容器名(或容器id)


        刪除Docker鏡像:docker rmi 容鏡像名:版本號(或鏡像id)


        進入Docker容器:sudo docker exec -it 容器名 bash

        實用干貨分享(2) - Docker使用操作指南


        查看Docker容器的地址:docker inspect 容器名(或容器id)

        實用干貨分享(2) - Docker使用操作指南


        向Docker容器中拷貝文件:docker cp 文件名 容器id:容器中的目錄


        啟動Docker容器:docker run --name 容器名稱(自定)-v 虛擬機目錄:容器目錄 -e 環境變量參數 -d docker鏡像名稱:版本號


        --name 容器命名

        -v 文件掛載

        -e 設置環境變量

        -d 選擇鏡像

        -p 端口映射


        例子:

        docker run --name mysql --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7


        三、開源Docker鏡像下載過程

        (以mysql為例)

        實用干貨分享(2) - Docker使用操作指南


        在阿里云鏡像倉庫找搜索mysql容器進行

        實用干貨分享(2) - Docker使用操作指南


        實用干貨分享(2) - Docker使用操作指南


        實用干貨分享(2) - Docker使用操作指南


        查看下載好的鏡像

        實用干貨分享(2) - Docker使用操作指南


        啟動:

        docker run --name mysql --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.20


        四、自己打包Docker鏡像過程

        (以logstash為例)


        1. 目錄準備

        實用干貨分享(2) - Docker使用操作指南


        準備好logstash的模板文件、jdk1.8的安裝包、logstash的配置文件以及logstash的安裝包。


        2. 修改配置文件

        實用干貨分享(2) - Docker使用操作指南


        kafka的地址和端口要使用宿主機的地址以及在部署kafka容器時做的端口映射的端口(這里使用的就是這種方法)。


        還可以使用docker inspect命令查詢kafka容器的地址,然后使用kafka容器的地址和kafka匹配的端口。

        實用干貨分享(2) - Docker使用操作指南


        模板文件的地址配置時要使用logstash容器內的地址,要與Dockerfile文件內所規定的目錄層級一致(可以自定)。


        3. Dockerfile文件編寫

        實用干貨分享(2) - Docker使用操作指南


        模板:

        FROM centos:latest

        MAINTAINER xzp

        WORKDIR /usr/local

        ADD jdk-8u251-linux-x64.tar.gz /usr/local

        ENV JAVA_HOME=/usr/local/jdk1.8.0_251

        ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

        ENV PATH=$JAVA_HOME/bin:$PATH

        ENV LANG C.UTF-8

        RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

        RUN echo 'Asia/Shanghai' >/etc/timezone

        WORKDIR /opt/logstash

        ADD logstash-6.8.3.tar.gz /opt/logstash

        ADD kafka-logstash-es.conf /opt/logstash/logstash-6.8.3/config

        ADD es-template.json /opt/logstash/logstash-6.8.3/config

        ENTRYPOINT ["/opt/logstash/logstash-6.8.3/bin/logstash", "-f", "/opt/logstash/logstash-6.8.3/config/kafka-logstash-es.conf"]


        補充:

        實用干貨分享(2) - Docker使用操作指南


        實用干貨分享(2) - Docker使用操作指南


        4. 生成鏡像

        實用干貨分享(2) - Docker使用操作指南


        實用干貨分享(2) - Docker使用操作指南


        實用干貨分享(2) - Docker使用操作指南


        實用干貨分享(2) - Docker使用操作指南


        5. 啟動Docker容器

        實用干貨分享(2) - Docker使用操作指南


        實用干貨分享(2) - Docker使用操作指南


        五、Docker打包鏡像過程中

        注意事項


        ● 在配置一些組件的配置文件時,文件中的ip和端口的配置要依據映射或是容器的ip和端口;

        ● 在配置文件以及腳本文件時有路徑的一律使用鏡像中的路徑;

        ● 在要使用啟動jar包的命令時,不論是在腳本中還是在Dockerfile中,一律不許使用nohup;

        ● 在使用docker build -t 進行生產鏡像時,必須在Docker同級目錄下執行;

        ● 在使用 docker build -t 時不要忽略最后的空格和點;

        ● 在生成平臺組件的鏡像時必須使用自己的jdk;

        ● 在Dockerfile 執行腳本文件時必須給腳本文件授權;

        ● docker save和docker load命令必須使用同一套。


        六、Docker打包以及部署過程中

        遇到的bug

        實用干貨分享(2) - Docker使用操作指南


        解決辦法:在Dockerfile文件添加授權命令并重新生產鏡像。


        添加命令為:RUN chmod -R 777 容器中的絕對路徑

        實用干貨分享(2) - Docker使用操作指南


        問題描述:端口映射出現問題

        解決辦法:使用systemctl restart docker命令重啟docker


        錯誤描述:容器啟動之后,正常運轉一段時間后,重啟

        解決辦法以及解決思路:

        ①查看配置文件,檢查配置項,查看輸出的日志;

        ②如果使用的是容器管理平臺,需要查看腳本文件中啟動所需要的內存資源,不能分配資源少于腳本中所需的資源;

        ③將日志文件掛載出來,查看日志文件。


        錯誤描述:數據庫表名大小寫報錯,已經倒庫時報錯。

        實用干貨分享(2) - Docker使用操作指南


        問題原因:數據庫版本問題

        解決辦法以及解決思路:

        ①找較新版本的數據庫鏡像(不建議使用);

        ②自己打包鏡像并在my.cnf中加入以下配置。

        #解決時間默認值不兼容的

        sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

        #設置忽略大小寫(簡單來說就是sql語句是否嚴格),默認庫名表名保存為小寫, 不區分大小寫

        lower_case_table_names = 1


        錯誤描述:在build鏡像時,報錯找不到路徑

        解決辦法及解決思路:

        ①檢查build命令后是否存在空格和點(千萬不要忘記);

        ②檢查Dockerfile中的路徑是否正確;

        ③檢查腳本中的路徑是否與Dockerfile中的路徑一致,都采用鏡像中的路徑,且必須為絕對路徑。


        七、開源組件Docker鏡像運行指令


        Filebeat啟動命令

        docker run -d --name=filebeat --user=root --volume="/home/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro" --volume="/var/lib/docker/containers:/var/lib/docker/cintainers:ro" --volume="/var/run/docker.sock:/var/run/docker.sock:ro" elastic/filebeat:6.8.3 filebeat -e -strict.perms=false


        Es啟動命令

        docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.8.3


        Redis啟動命令

        docker run -p 6379:6379 --name myredis -v /home/redis/redis.conf:/etc/redis/redis.conf -d redis:5.0.4 redis-server /etc/redis/redis.conf --appendonil yes


        Zk啟動命令

        docker run -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime -d wurstmeister/zookeeper


        Kafka的啟動命令

        ocker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=172.16.0.13:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.16.0.13:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime wurstmeister/kafka


        mysql啟動命令

        docker run --name mysql --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7


        八、可參考的容器鏡像倉庫


        國內(阿里):
        https://account.aliyun.com/

        官方:https://hub.docker.com/


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: 干貨

        技術專區

        關閉
        主站蜘蛛池模板: 泰和县| 时尚| 托克逊县| 萝北县| 色达县| 苍溪县| 乐亭县| 威远县| 开鲁县| 广德县| 沐川县| 华池县| 登封市| 梅州市| 新龙县| 邛崃市| 房山区| 吴忠市| 乐都县| 贵阳市| 汉源县| 临沧市| 鹤峰县| 兴化市| 西和县| 平果县| 富裕县| 浦县| 遂川县| 九龙城区| 拉萨市| 张家界市| 榆树市| 常宁市| 陵川县| 沂南县| 嵩明县| 金阳县| 中卫市| 类乌齐县| 伊吾县|