實(shí)用干貨分享(2) - Docker使用操作指南
一、Docker安裝部署
1. 安裝倉(cāng)庫(kù)
執(zhí)行以下命令,安裝Docker所需的包。其中yum-utils提供yum-config-manager工具;
device-mapper-persistent-data及l(fā)vm2則是devicemapper存儲(chǔ)驅(qū)動(dòng)所需的包。
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
執(zhí)行如下命令,安裝stable倉(cāng)庫(kù)。必須安裝stable倉(cāng)庫(kù),即使你想安裝edge或test倉(cāng)庫(kù)中的Docker構(gòu)建版本。
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
[可選]執(zhí)行如下命令,啟用edge及test倉(cāng)庫(kù)。edge/test倉(cāng)庫(kù)其實(shí)也包含在了docker.repo 文件中,但默認(rèn)是禁用的,可使用以下命令來(lái)啟用。
sudo yum-config-manager --enable docker-ce-edge # 啟用edge倉(cāng)庫(kù)
sudo yum-config-manager --enable docker-ce-test # 啟用test倉(cāng)庫(kù)
如需再次禁用,可加上--disable 標(biāo)簽。例如:執(zhí)行如下命令即可禁用edge倉(cāng)庫(kù)。
sudo yum-config-manager --disable docker-ce-edge
2. 安裝Docker CE
執(zhí)行以下命令,更新yum的包索引
sudo yum makecache fast
執(zhí)行如下命令即可安裝最新版本的Docker CE
sudo yum install docker-ce
在生產(chǎn)環(huán)境中,可能需要指定想要安裝的版本,此時(shí)可使用如下命令列出當(dāng)前可用的Docker版本。
yum list docker-ce.x86_64 --showduplicates | sort -r
可使用如下命令,安裝想要安裝的Docker CE版本。
sudo yum install docker-ce-
啟動(dòng)Docker
Sudo systemctl start docker
這樣,Docker將會(huì)下載測(cè)試鏡像,并使用該鏡像啟動(dòng)一個(gè)容器。如果能夠看到類似如下的輸出,則說(shuō)明安裝成功。(時(shí)間較長(zhǎng))
二、Docker操作的基本命令
啟動(dòng)Docker:sudo systemctl start docker
Docker鏡像導(dǎo)入:docker load < 鏡像包名(一般格式為tar.gz)
Docker鏡像導(dǎo)出:docker save 鏡像名 > 鏡像所要打成的包名(一般格式為tar.gz)
Docker鏡像查看:docker images
查看已經(jīng)啟動(dòng)的Docker容器:docker ps
查看所有Docker容器:docker ps -a
下載Docker鏡像: docker pull 鏡像名稱(可以到鏡像倉(cāng)庫(kù)查詢)
創(chuàng)建鏡像:docker build -t 鏡像名稱(自定):版本號(hào)(自定) . 執(zhí)行此命令前必須先寫(xiě)好Dockerfile文件,創(chuàng)建鏡像命令要在Dockerfile所在目錄執(zhí)行,不要忘記版本號(hào)后加空格和點(diǎn)。
停止Docker容器:docker stop 容器名(或容器id)
刪除Docker容器:docker rm 容器名(或容器id)
刪除Docker鏡像:docker rmi 容鏡像名:版本號(hào)(或鏡像id)
進(jìn)入Docker容器:sudo docker exec -it 容器名 bash
查看Docker容器的地址:docker inspect 容器名(或容器id)
向Docker容器中拷貝文件:docker cp 文件名 容器id:容器中的目錄
啟動(dòng)Docker容器:docker run --name 容器名稱(自定)-v 虛擬機(jī)目錄:容器目錄 -e 環(huán)境變量參數(shù) -d docker鏡像名稱:版本號(hào)
--name 容器命名
-v 文件掛載
-e 設(shè)置環(huán)境變量
-d 選擇鏡像
-p 端口映射
例子:
docker run --name mysql --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
三、開(kāi)源Docker鏡像下載過(guò)程
(以mysql為例)
在阿里云鏡像倉(cāng)庫(kù)找搜索mysql容器進(jìn)行
查看下載好的鏡像
啟動(dòng):
docker run --name mysql --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.20
四、自己打包Docker鏡像過(guò)程
(以logstash為例)
1. 目錄準(zhǔn)備
準(zhǔn)備好logstash的模板文件、jdk1.8的安裝包、logstash的配置文件以及l(fā)ogstash的安裝包。
2. 修改配置文件
kafka的地址和端口要使用宿主機(jī)的地址以及在部署kafka容器時(shí)做的端口映射的端口(這里使用的就是這種方法)。
還可以使用docker inspect命令查詢kafka容器的地址,然后使用kafka容器的地址和kafka匹配的端口。
模板文件的地址配置時(shí)要使用logstash容器內(nèi)的地址,要與Dockerfile文件內(nèi)所規(guī)定的目錄層級(jí)一致(可以自定)。
3. Dockerfile文件編寫(xiě)
模板:
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"]
補(bǔ)充:
4. 生成鏡像
5. 啟動(dòng)Docker容器
五、Docker打包鏡像過(guò)程中
注意事項(xiàng)
● 在配置一些組件的配置文件時(shí),文件中的ip和端口的配置要依據(jù)映射或是容器的ip和端口;
● 在配置文件以及腳本文件時(shí)有路徑的一律使用鏡像中的路徑;
● 在要使用啟動(dòng)jar包的命令時(shí),不論是在腳本中還是在Dockerfile中,一律不許使用nohup;
● 在使用docker build -t 進(jìn)行生產(chǎn)鏡像時(shí),必須在Docker同級(jí)目錄下執(zhí)行;
● 在使用 docker build -t 時(shí)不要忽略最后的空格和點(diǎn);
● 在生成平臺(tái)組件的鏡像時(shí)必須使用自己的jdk;
● 在Dockerfile 執(zhí)行腳本文件時(shí)必須給腳本文件授權(quán);
● docker save和docker load命令必須使用同一套。
六、Docker打包以及部署過(guò)程中
遇到的bug
解決辦法:在Dockerfile文件添加授權(quán)命令并重新生產(chǎn)鏡像。
添加命令為:RUN chmod -R 777 容器中的絕對(duì)路徑
問(wèn)題描述:端口映射出現(xiàn)問(wèn)題
解決辦法:使用systemctl restart docker命令重啟docker
錯(cuò)誤描述:容器啟動(dòng)之后,正常運(yùn)轉(zhuǎn)一段時(shí)間后,重啟
解決辦法以及解決思路:
①查看配置文件,檢查配置項(xiàng),查看輸出的日志;
②如果使用的是容器管理平臺(tái),需要查看腳本文件中啟動(dòng)所需要的內(nèi)存資源,不能分配資源少于腳本中所需的資源;
③將日志文件掛載出來(lái),查看日志文件。
錯(cuò)誤描述:數(shù)據(jù)庫(kù)表名大小寫(xiě)報(bào)錯(cuò),已經(jīng)倒庫(kù)時(shí)報(bào)錯(cuò)。
問(wèn)題原因:數(shù)據(jù)庫(kù)版本問(wèn)題
解決辦法以及解決思路:
①找較新版本的數(shù)據(jù)庫(kù)鏡像(不建議使用);
②自己打包鏡像并在my.cnf中加入以下配置。
#解決時(shí)間默認(rèn)值不兼容的
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#設(shè)置忽略大小寫(xiě)(簡(jiǎn)單來(lái)說(shuō)就是sql語(yǔ)句是否嚴(yán)格),默認(rèn)庫(kù)名表名保存為小寫(xiě), 不區(qū)分大小寫(xiě)
lower_case_table_names = 1
錯(cuò)誤描述:在build鏡像時(shí),報(bào)錯(cuò)找不到路徑
解決辦法及解決思路:
①檢查build命令后是否存在空格和點(diǎn)(千萬(wàn)不要忘記);
②檢查Dockerfile中的路徑是否正確;
③檢查腳本中的路徑是否與Dockerfile中的路徑一致,都采用鏡像中的路徑,且必須為絕對(duì)路徑。
七、開(kāi)源組件Docker鏡像運(yùn)行指令
Filebeat啟動(dòng)命令
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啟動(dòng)命令
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.8.3
Redis啟動(dòng)命令
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啟動(dòng)命令
docker run -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime -d wurstmeister/zookeeper
Kafka的啟動(dòng)命令
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啟動(dòng)命令
docker run --name mysql --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
八、可參考的容器鏡像倉(cāng)庫(kù)
國(guó)內(nèi)(阿里):
https://account.aliyun.com/
官方:https://hub.docker.com/
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。