柚子快報(bào)邀請(qǐng)碼778899分享:運(yùn)維 容器 docker
柚子快報(bào)邀請(qǐng)碼778899分享:運(yùn)維 容器 docker
docker概述
docker的安裝
安裝docker
# 1、yum 包更新到最新
yum update
# 2、安裝需要的軟件包, yum-util 提供yum-config-manager功能,另外兩個(gè)是devicemapper驅(qū)動(dòng)依賴的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 設(shè)置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4、 安裝docker,出現(xiàn)輸入的界面都按 y
yum install -y docker-ce
# 5、 查看docker版本,驗(yàn)證是否驗(yàn)證成功
docker -v
配置docker鏡像加速器
登錄阿里云,點(diǎn)擊控制臺(tái)搜索鏡像加速器粘貼里面的代碼
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://2ciqvj0f.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker基本命令
docker相關(guān)命令
#啟動(dòng)docker
systemctl start docker
#關(guān)閉docker
systemctl stop docker
#重啟docker
systemctl restart docker
#查看docker的狀態(tài)
systemctl status docker
docker鏡像相關(guān)命令
#查看本地鏡像
docker images
#查看所用鏡像id
docker images -q
#搜索鏡像
docker search images
#從docker倉(cāng)庫(kù)下載鏡像到本地
docker pull 鏡像名稱
#刪除鏡像
docker rmi 鏡像id
docker容器相關(guān)命令
#查看正在運(yùn)行的容器
docker ps
#查看所有容器
docker ps -a
#創(chuàng)建并啟動(dòng)容器,-i保持容器運(yùn)行,-t為容器分配一個(gè)偽容器終端,-d以守護(hù)進(jìn)程方式運(yùn)行容器,--name為創(chuàng)建的容器命名
docker run 參數(shù)
#進(jìn)入容器
docker exec 參數(shù)
#停止容器
docker stop 容器名稱
#啟動(dòng)容器
docker start 容器名稱
#刪除容器
docker rm 容器名稱
#查看容器信息
docker inspect 容器名稱
數(shù)據(jù)卷
數(shù)據(jù)卷
數(shù)據(jù)卷是宿主機(jī)中的一個(gè)文件或者目錄當(dāng)容器中的目錄和數(shù)據(jù)卷目錄綁定后,對(duì)方的修改會(huì)立即同步一個(gè)數(shù)據(jù)卷可以被多個(gè)容器掛載,一個(gè)容器也可以掛載多個(gè)數(shù)據(jù)卷
數(shù)據(jù)卷的作用
容器數(shù)據(jù)持久化外部機(jī)器和容器通信容器之間數(shù)據(jù)交換
命令
#目錄必須是絕對(duì)路徑
docker run ... –v 宿主機(jī)目錄(文件):容器內(nèi)目錄(文件) ...
#創(chuàng)建數(shù)據(jù)卷容器
docker run –it --name=c3 –v /volume centos:7 /bin/bash
#其余容器繼承自數(shù)據(jù)卷容器
docker run –it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run –it --name=c2 --volumes-from c3 centos:7 /bin/bash
應(yīng)用部署
部署MySQL
創(chuàng)建目錄
# 在/root目錄下創(chuàng)建mysql目錄用于存儲(chǔ)mysql數(shù)據(jù)信息
mkdir ~/mysql
cd ~/mysql
設(shè)置端口映射、目錄映射、啟動(dòng)容器
docker run -id \
#容器端口3306映射到宿主機(jī)端口3307
-p 3307:3306 \
#容器名稱
--name=c_mysql \
#目錄掛載,$PWD表示當(dāng)前目錄
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6
部署tomcat
創(chuàng)建目錄
# 在/root目錄下創(chuàng)建tomcat目錄用于存儲(chǔ)tomcat數(shù)據(jù)信息
mkdir ~/tomcat
cd ~/tomcat
設(shè)置端口映射、目錄映射、啟動(dòng)容器
docker run -id --name=c_tomcat \
-p 8080:8080 \
#目錄映射
-v $PWD:/usr/local/tomcat/webapps \
tomcat
部署nginx
創(chuàng)建目錄
# 在/root目錄下創(chuàng)建nginx目錄用于存儲(chǔ)nginx數(shù)據(jù)信息
mkdir ~/nginx
cd ~/nginx
mkdir conf
cd conf
# 在~/nginx/conf/下創(chuàng)建nginx.conf文件,粘貼下面內(nèi)容
vim nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
進(jìn)行端口映射、啟動(dòng)容器
docker run -id --name=c_nginx \
#端口映射
-p 80:80 \
#目錄掛載
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx
dockerfile
docker鏡像
docker鏡像本質(zhì):一個(gè)分層文件系統(tǒng)docker鏡像的原理: docker鏡像是特殊文件系統(tǒng)疊加而成的,最底層是bootfs并使用宿主機(jī)的bootfs,第二層是root文件系統(tǒng)rootfs,統(tǒng)一文件系統(tǒng)(Union File System)技術(shù)能夠?qū)⒉煌膶诱铣梢粋€(gè)文件系統(tǒng),為這些層提供了一個(gè)統(tǒng)一的視角,這樣就隱藏了多層的存在,在用戶的角度看來(lái),只存在一個(gè)文件系統(tǒng)。一個(gè)鏡像可以放在另一個(gè)鏡像的上面。位于下面的鏡像稱為父鏡像,最底部的鏡像成為基礎(chǔ)鏡像。當(dāng)從一個(gè)鏡像啟動(dòng)容器時(shí), Docker會(huì)在最頂層加載一個(gè)讀寫(xiě)文件系統(tǒng)作為容器。
鏡像制作
容器轉(zhuǎn)為鏡像
docker commit 容器id 鏡像名稱:版本號(hào)
docker save -o 壓縮文件名稱 鏡像名稱:版本號(hào)
docker load –i 壓縮文件名稱
使用dockerfile制作鏡像 dockerfile就是一個(gè)文件,文件中包含了若干條指令,一條指令構(gòu)建一層,基于基礎(chǔ)鏡像構(gòu)建自己的鏡像。 1、dockerfile中的基本指令
關(guān)鍵字作用備注FROM指定父鏡像指定dockerfile基于那個(gè)image構(gòu)建MAINTAINER作者信息用來(lái)標(biāo)明這個(gè)dockerfile誰(shuí)寫(xiě)的LABEL標(biāo)簽用來(lái)標(biāo)明dockerfile的標(biāo)簽 可以使用Label代替Maintainer 最終都是在docker image基本信息中可以查看RUN執(zhí)行命令執(zhí)行一段命令 默認(rèn)是/bin/sh 格式: RUN command 或者 RUN [“command” , “param1”,“param2”]CMD容器啟動(dòng)命令提供啟動(dòng)容器時(shí)候的默認(rèn)命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD [“command” , “param1”,“param2”]ENTRYPOINT入口一般在制作一些執(zhí)行就關(guān)閉的容器中會(huì)使用COPY復(fù)制文件build的時(shí)候復(fù)制文件到image中ADD添加文件build的時(shí)候添加文件到image中 不僅僅局限于當(dāng)前build上下文 可以來(lái)源于遠(yuǎn)程服務(wù)ENV環(huán)境變量指定build時(shí)候的環(huán)境變量 可以在啟動(dòng)的容器的時(shí)候 通過(guò)-e覆蓋 格式ENV name=valueARG構(gòu)建參數(shù)構(gòu)建參數(shù) 只在構(gòu)建的時(shí)候使用的參數(shù) 如果有ENV 那么ENV的相同名字的值始終覆蓋arg的參數(shù)VOLUME定義外部可以掛載的數(shù)據(jù)卷指定build的image那些目錄可以啟動(dòng)的時(shí)候掛載到文件系統(tǒng)中 啟動(dòng)容器的時(shí)候使用 -v 綁定 格式 VOLUME [“目錄”]EXPOSE暴露端口定義容器運(yùn)行的時(shí)候監(jiān)聽(tīng)的端口 啟動(dòng)容器的使用-p來(lái)綁定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udpWORKDIR工作目錄指定容器內(nèi)部的工作目錄 如果沒(méi)有創(chuàng)建則自動(dòng)創(chuàng)建 如果指定/ 使用的是絕對(duì)地址 如果不是/開(kāi)頭那么是在上一條workdir的路徑的相對(duì)路徑USER指定執(zhí)行用戶指定build或者啟動(dòng)的時(shí)候 用戶 在RUN CMD ENTRYPONT執(zhí)行的時(shí)候的用戶HEALTHCHECK健康檢查指定監(jiān)測(cè)當(dāng)前容器的健康監(jiān)測(cè)的命令 基本上沒(méi)用 因?yàn)楹芏鄷r(shí)候 應(yīng)用本身有健康監(jiān)測(cè)機(jī)制ONBUILD觸發(fā)器當(dāng)存在ONBUILD關(guān)鍵字的鏡像作為基礎(chǔ)鏡像的時(shí)候 當(dāng)執(zhí)行FROM完成之后 會(huì)執(zhí)行 ONBUILD的命令 但是不影響當(dāng)前鏡像 用處也不怎么大STOPSIGNAL發(fā)送信號(hào)量到宿主機(jī)該STOPSIGNAL指令設(shè)置將發(fā)送到容器的系統(tǒng)調(diào)用信號(hào)以退出。SHELL指定執(zhí)行腳本的shell指定RUN CMD ENTRYPOINT 執(zhí)行命令的時(shí)候 使用的shell
2、部署SpringBoot項(xiàng)目 將SpringBoot項(xiàng)目打包,上傳到linux中,新建立一個(gè)dockerfile,輸入以下內(nèi)容:
#加載jdk
FROM java:8
#作者
MAINTAINER itheima
#添加項(xiàng)目
ADD hello-0.0.1-SNAPSHOT.jar app.jar
#運(yùn)行項(xiàng)目
CMD java -jar app.jar
構(gòu)建鏡像,輸入如下命令
docker bulid –f dockerfile文件路徑 –t 鏡像名稱:版本
初始化容器
docker run -id -p 8081:8080 鏡像名稱:版本
docker服務(wù)編排
微服務(wù)架構(gòu)需要啟動(dòng)多個(gè)容器,多個(gè)容器的啟動(dòng)需要遵循一定的順序,需要管理這些容器。如果手動(dòng)去操作,太過(guò)繁瑣。服務(wù)編排就是按照一定的順序批量管理這些容器。
使用Docker Compose進(jìn)行服務(wù)編排 安裝
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
設(shè)置權(quán)限
chmod +x /usr/local/bin/docker-compose
查看版本信息
docker-compose -version
編排項(xiàng)目 創(chuàng)建docker-compose目錄
mkdir ~/docker-compose
cd ~/docker-compose
編寫(xiě)docker-compose.yml文件
version: '3'
services:
#設(shè)置nginx容器
nginx:
#容器使用的鏡像
image: nginx
#端口映射
ports:
- 80:80
#反向代理的服務(wù)
links:
- app
#掛載的目錄
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
#SpringBoot項(xiàng)目
app:
image: app
#暴露的接口
expose:
- "8080"
創(chuàng)建./nginx/conf.d目錄并在該目錄下編寫(xiě)配置文件xxx.conf
server {
#監(jiān)聽(tīng)對(duì)nginx的80端口的訪問(wèn)
listen 80;
access_log off;
location / {
#映射到app的
proxy_pass http://app:8080;
}
}
在~/docker-compose目錄下使用docker-compose啟動(dòng)容器
docker-compose up
柚子快報(bào)邀請(qǐng)碼778899分享:運(yùn)維 容器 docker
參考鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。