柚子快報(bào)邀請碼778899分享:容器 運(yùn)維 Docker學(xué)習(xí)
柚子快報(bào)邀請碼778899分享:容器 運(yùn)維 Docker學(xué)習(xí)
1、docker
docker是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的Linux機(jī)器上,也可以實(shí)現(xiàn)虛擬化,容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。
2、初識(shí)docker
開發(fā)環(huán)境 ->? 測試環(huán)境 -> 生產(chǎn)環(huán)境
3、安裝docker
# 1、切換鏡像源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# 2、查看當(dāng)前鏡像源中支持的docker版本
yum list docker-ce --showduplicates
# 3、安裝特定版本的docker-ce
# 必須指定 --setopt=obsoletes=0,否則yum會(huì)自動(dòng)安裝更高版本。
yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
# 4、添加一個(gè)配置文件
# Docker在默認(rèn)情況下使用的Cgroup Driver為cgroupfs,而kubernetes推薦使用sysetemd來代替cgroupfs
mkdir /etc/docker
cd /etc/docker
touch daemon.json
通過vi編輯器輸入一下內(nèi)容
{
"registry-mirrors":["https://nh2pqkbt.mirror.aliyuncs.com"],
"insecure-registries":["192.168.31.101:5000"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
#5、啟動(dòng)docker
systemctl enable docker
systemctl restart docker
# 6、查看docker版本,驗(yàn)證是否安裝成功
docker -v
4、docker架構(gòu)
鏡像(Image)
容器(Container)
倉庫(Repository)
5、配置docker鏡像加速器(安裝時(shí)已配置無需做)
設(shè)置docker國內(nèi)鏡像源【國內(nèi)鏡像源大全】_docker鏡像網(wǎng)站-CSDN博客
1、創(chuàng)建文件:touch? /etc/docker/daemon.json
2、然后vi編輯器輸入以下內(nèi)容
{
? "registry-mirrors": ["https://nh2pqkbt.mirror.aliyuncs.com"]
}
上述內(nèi)容如果拷貝的網(wǎng)頁上的,注意刪除下看不見的空格,否則很容易因?yàn)榭床灰姷淖址麑?dǎo)致json格式解析失敗,進(jìn)而導(dǎo)致docker啟動(dòng)失敗,最好是拷貝到一個(gè)純文本文件中(不帶格式),調(diào)整以下再拷貝。如果實(shí)在不行就手動(dòng)輸入,切注意使用英文輸入法。
3、重啟Docker sudo systemctl daemon-reload sudo systemctl restart docker
6、docker命令——服務(wù)相關(guān)命令
啟動(dòng):systemctl start docker
狀態(tài):systemctl? status docker
停止: sysetmctl stop docker
重啟:sysetmctl restart docker
開機(jī)自啟動(dòng): systemctl enable docker
7、docker命令——鏡像相關(guān)命令
查看:docker images
搜索:docker seearch redis(搜索“redis”)
拉?。篸ocker pull redis (默認(rèn)latest版本)
拉?。篸ocker pull redis:5.0(下載5.0版本,鏡像有哪些版本需要去hub上自己去查)
刪除:docker rmi? imgae_id (image輸入具體的鏡像id)
刪除: docker rmi name:tag (由于相同name可能有不同的tag,所以需要name+tag)
全部刪除: docker rmi `docker images -q` (docker images -q查看所有鏡像的id)
8、docker命令——容器相關(guān)命令1
創(chuàng)建容器:docker run -it --name=c1 centos:7? /bin/bash? ? (-i 保持運(yùn)行,-t分配終端 ,--name起名字, /bin/bash? 進(jìn)入容器的初始化指令) ※交互式容器
創(chuàng)建容器:docker run -id?--name=c1 centos:7?(-i 保持運(yùn)行,-d后臺(tái)運(yùn)行,退出容器容器不關(guān)閉?,--name起名字) ※守護(hù)式容器
exit 退出容器,回到宿主機(jī)
查看容器;:docker ps (正在運(yùn)行的)
查看容器:docker ps -a (所有容器)
進(jìn)入容器:docker exec -it C2 bin/bash
補(bǔ)充:docker run -e TZ=Asia/Shanghai --name your_container_name -d your_image
-e指定時(shí)區(qū)
9、docker命令——容器相關(guān)命令2
停止容器:docker stop 容器ID/容器名稱?
啟動(dòng)容器:docker start 容器ID/容器名稱
刪除容器:docker rm? 容器ID/容器名稱?
刪除所有:docker rm `docker ps -aq` (運(yùn)行狀態(tài)的無法刪除)
查看容器信息: docker inspect?容器ID/容器名稱
10、docker 容器數(shù)據(jù)卷——數(shù)據(jù)卷概念以及作用
11、docker 容器數(shù)據(jù)卷——配置數(shù)據(jù)卷(持久化)
docker run -id?--name=c1 -v /root/data:/root/data_container centos:7
touch a.txt 創(chuàng)建一個(gè)文件,exit到宿主機(jī),然后cd 到? /root/data 下查看文件。刪除c1后,宿主機(jī)的data目錄依然存在。
-v參數(shù)可以設(shè)置多個(gè),實(shí)現(xiàn)一個(gè)容器掛載多個(gè)目錄。
12、docker 容器數(shù)據(jù)卷——配置數(shù)據(jù)卷2(容器間通信)
多個(gè)容器掛載同一個(gè)目錄,操作步驟同上。效果如如圖。
13、docker 容器數(shù)據(jù)卷——數(shù)據(jù)卷容器
1、創(chuàng)建啟動(dòng)c3數(shù)據(jù)卷容器,使用-v參數(shù)設(shè)置數(shù)據(jù)卷
docker run -id?--name=c3 -v? /volume centos:7
2、創(chuàng)建啟動(dòng) c1 c2 容器,使用 --volumes-from 參數(shù)設(shè)置容器卷
docker run -id --name=c1 --volumes-from c3 centos:7
docker run -id --name=c2?--volumes-from c3 centos:7
3、通過touch 文件查看各個(gè)容器的volume目錄的文件同步情況。
只是一種簡便的配置的方式,即使c3不在運(yùn)行狀態(tài),c1 c2運(yùn)行不受影響??梢酝ㄟ^docker inspect命令查看這幾個(gè)容器,他們的Mounts節(jié)點(diǎn)信息是一樣的。
14、docker應(yīng)用部署——部署mysql
1、搜索mysql鏡像
docker search mysql
2、拉取mysql鏡像
docker pull mysq 5.6
3、創(chuàng)建容器,設(shè)置端口映射、目錄映射。
# 在root目錄下創(chuàng)建mysql目錄,用于存儲(chǔ)mysql信息
mkdir ~/mysql
docker run -id \
-p 3307:3306 \
--name=c_mysql \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/logs:/logs \
-v /root/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6
遺留:對于諸多的中間件,如果需要在docker里部署,第一手的資料是從docker的相關(guān)資料文檔上去找,還是去該中間件的官方文檔去找。
15、docker應(yīng)用部署——部署tomcat
1、搜索tomcat鏡像
docker search tomcat
2、拉取tomcat鏡像
docker pull tomcat?
3、創(chuàng)建容器、設(shè)置端口映射、目錄映射
mkdir? /root/tomcat
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v /root/tomcat/:/usr/local/tomcat/webapps \
tomcat
4、驗(yàn)證
cd /root/tomcat
mkdir test
cd test
touch index.html
最后隨便在index.html里寫點(diǎn)html代碼,然后再瀏覽器里訪問 http://宿主機(jī)IP:8080/test/index.html
16、docker應(yīng)用部署——部署nginx
1、搜索nginx鏡像
docker search nginx
2、拉取nginx鏡像
docker pull nginx
3、準(zhǔn)備工作
mkdir? /root/nginx
cd /root/nginx
mkdir? conf? ?
cd? conf
vim nginx.conf? (內(nèi)容直接用nginx安裝包里的nginx.conf文件,因?yàn)檫@個(gè)文件是nginx的核心配置文件,是需要根據(jù)業(yè)務(wù)調(diào)整的,因此需要通過掛載的方式保存在宿主機(jī)上)
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include 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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
4、創(chuàng)建容器、設(shè)置端口映射、目錄映射
docker run -id --name=c_nginx \
-p 80:80 \
-v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /root/nginx/logs/:/var/log/nginx \
-v /root/nginx/html:/etc/nginx/html \
nginx
注意:不同版本的nginx,目錄結(jié)構(gòu)有可能有所不同。
17、docker應(yīng)用部署——部署redis
1、搜索redis鏡像
docker search redis
2、拉取redis鏡像
docker pull redis:5.0
3、創(chuàng)建容器、設(shè)置端口映射
docker run -id \
-p 6379:6379 \
--name c_redis \
-v /root/redis/redis.conf:/etc/redis/redis.conf \
-v /root/redis/data:/data \
redis:5.0
?遺留:redis的配置文件,持久化等。
4、使用外部機(jī)器鏈接redis,或者其他UI客戶端
./redis-cli.exe -h 192.168.31.101 -p 6379
18、dockerfile——鏡像原理
Linux文件系統(tǒng):
分層的文件系統(tǒng):
19、dockerfile——容器轉(zhuǎn)為鏡像
目錄掛載的內(nèi)容不會(huì)打到新的鏡像里,因?yàn)樗麄儗?shí)際存在在宿主機(jī)的目錄里。
20、dockerfile——dockerfile概述以及關(guān)鍵字
常見命令:
21、dockerfile——案例——部署springboot項(xiàng)目
?
dockerfile文件示例:
FROM java:8
MAINTAINER zhaojufei
ADD web-openapi-1.0.0.jar app.jar
CMD java -jar app.jar
構(gòu)建鏡像命令:docker build -f ./springboot_dockerfile -t app . 需要把jar包ftp到linux某個(gè)目錄,并且dockerfile和jar在同一個(gè)目錄下,方便ADD。
22、dockerfile——案例——自定義centos
23、docker compose——概述
24、docker compose——安裝使用
安裝docker compose
# compose目前已經(jīng)完全支持Linux、Mac Os和Windows,在我們安裝Compose之前,需要先安裝docker。下面我們以編譯好的二進(jìn)制包方式安裝在Linux系統(tǒng)中。
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è)置文件可執(zhí)行權(quán)限
chmod +x /usr/local/bin/docker-compose
# 查看版本信息
docker-compose -version
卸載docker-compose
rm? /usr/local/bin/docker-compose
使用docker compose編排nginx+springboot
1、創(chuàng)建docker-compose目錄
mkdir? ~/docker-compose
cd ~/docker-compose
2、編寫docker-compose.yml
version: '3'
services:
nginx:
image: nginx
ports:
- 80:80
links:
- app
volumes:
- /root/nginx/conf.d:/etc/nginx/conf.d
app:
image: app
expose:
- "8080"
3、創(chuàng)建 /root/nginx/conf.d 目錄
mkdir -p? /root/nginx/conf.d
4、在conf.d目錄下編寫nginx.conf文件
server {
listen 80;
access_log off;
location / {
proxy_pass http://app:8080;
}
}
5、在? /root/docker-compose目錄下使用docker-compose 啟動(dòng)容器
docker-compose up -d?
6、驗(yàn)證
25、docker私有倉庫——搭建
# 1、拉取私有倉庫鏡像
docker pull registry
# 2、啟動(dòng)私有倉庫容器
docker run -id --name=registry -p 5000:5000 registry
# 3、驗(yàn)證:打開瀏覽器,輸入地址 http://私服倉庫IP:5000/v2/_catalog,看到{"repositries":[]}表示私服搭建成功
# 4、修改daemon.json
vim /etc/docker/daemon.json
# 在上述文件中添加一個(gè)key,保存退出。此步驟用于讓docker信任私有倉庫地址;注意將私有倉庫服務(wù)器ip修改為自己私有服務(wù)器真實(shí)ip,daemon是個(gè)json格式的文件,如果已經(jīng)有配置(比如之前的鏡像配置),只需要加個(gè)逗號,將下面大括號里面的內(nèi)容追加到逗號后面即可。
{ "insecure-registries":["192.168.31.101:5000"] }
# 5、重啟docker服務(wù)
systemctl restart docker
docker start registry
26、docker私有倉庫——上傳鏡像
# 1、標(biāo)記鏡像為私有倉庫的鏡像: docker tag 鏡像名:版本 新的名字:版本。由于需要push,新的鏡像名要帶著倉庫信息,不打算push,這個(gè)名字可以隨意起
docker tag centos:7 私有倉庫服務(wù)器IP:5000/centos:7
# 2、上傳標(biāo)記的鏡像
docker push 私有倉庫服務(wù)器IP:5000/centos:7
驗(yàn)證:
27、docker私有倉庫——拉取鏡像
docker images 查看本地鏡像,刪除掉tag鏡像。
然后拉取 docker pull??192.168.31.101:5000/centos:7?
然后再次docker images看下是否拉取成功。
注意:我們看到下載時(shí)提示并沒有下載,而是使用舊的已刪除的做的恢復(fù)。這個(gè)不影響我們實(shí)驗(yàn)。
28、docker和虛擬機(jī)比較
柚子快報(bào)邀請碼778899分享:容器 運(yùn)維 Docker學(xué)習(xí)
好文推薦
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。