1.初始Docker
1.1.引入
正常情況1.2.概念
1.3.安裝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
- yum install -y docker-ce執(zhí)行此命令可能會(huì)安裝失敗滚粟,再次安裝即可
1.4.Docker架構(gòu)
安裝完docker,他會(huì)以守護(hù)進(jìn)程(daemon后臺(tái)運(yùn)行)的形式存在,docker內(nèi)部有兩個(gè)東西:鏡像和容器膝捞。鏡像是類坦刀,容器是實(shí)例,host里的鏡像來(lái)源于遠(yuǎn)程的倉(cāng)庫(kù)蔬咬,倉(cāng)庫(kù)分為官方倉(cāng)庫(kù)和私有倉(cāng)庫(kù)鲤遥。客戶端發(fā)送命令給守護(hù)進(jìn)程林艘。來(lái)進(jìn)行操作盖奈。
1.5.配置鏡像加速器
- 復(fù)制所有命令并執(zhí)行
- 阿里云需要登錄,每個(gè)人的地址不一樣 配置完執(zhí)行cat /etc/docker/daemon.json查看內(nèi)容
2.Docker命令
2.1.服務(wù)相關(guān)命令(守護(hù)進(jìn)程相關(guān)命令)
2.2.操作鏡像
-
查看鏡像(本地)
-
搜索鏡像(遠(yuǎn)程倉(cāng)庫(kù))
- 拉取鏡像(遠(yuǎn)程倉(cāng)庫(kù))不指定版本狐援,默認(rèn)下最新的版本
-
刪除鏡像(本地)
如果 id重復(fù)就會(huì)報(bào)錯(cuò)钢坦,可以通過(guò)名稱加版本進(jìn)行刪除 docker rmi redis:latest
- 查詢所有鏡像的id究孕。docker images -q
- 刪除所有的鏡像docker rmi `docker images -q`
-
總結(jié)
2.3.操作容器(最重要)
容器是由鏡像這個(gè)物理文件運(yùn)行起來(lái)的實(shí)例
-
創(chuàng)建并進(jìn)入容器
-i表示容器一直運(yùn)行 -t表示給容器分配一個(gè)偽終端(輸入完該指令立刻進(jìn)入容器) --name給容器起個(gè)名字 指定鏡像以及版本 /bin/bash進(jìn)入容器的初始化指令
- --name=c1 --name c1 等號(hào)空格都可以
- 退出容器 exit
-
查看容器(正在運(yùn)行以及歷史運(yùn)行的記錄)
-
創(chuàng)建容器不進(jìn)入,后臺(tái)運(yùn)行
-d 后臺(tái)運(yùn)行 不進(jìn)入不需要寫/bin/bash
-
查看容器
-
進(jìn)入容器
- 通過(guò)-id方式創(chuàng)建容器 通過(guò)exec進(jìn)入容器爹凹,這種方式退出exit厨诸,容器不會(huì)關(guān)閉
-
小結(jié)
進(jìn)入容器可以加/bin/bash,可以不加禾酱,不加默認(rèn)也是此
- 啟動(dòng)容器 docker start c4
- 關(guān)閉容器 docker stop c4
- 刪除容器 docker rm c4 (也可以加容器的id)
- 刪除容器 docker rm c1 c2 c3 c4
- 刪除所有容器 docker rm
docker ps -aq
不能包含正在運(yùn)行的容器 - 查看容器信息 docker inspect c4
-
小結(jié)
3.Docker容器數(shù)據(jù)卷
3.1.數(shù)據(jù)卷概念及作用
3.2.配置數(shù)據(jù)卷
- docker run -it --name=c1 -v /root/data:/root/data_container centos:7 /bin/bash
- 容器中的/root/data目錄下touch a.txt 宿主機(jī)對(duì)應(yīng)目錄也可以看到該文件
- echo hello > a.txt 無(wú)論在哪個(gè)目錄下的文檔輸入文字 另一個(gè)目錄下文檔都可以查看到內(nèi)容
- cat a.txt
- docker中關(guān)閉 刪除容器微酬,宿主機(jī)目錄和內(nèi)容都存在的
- 再次掛載宿主機(jī)數(shù)據(jù)卷docker run -it --name=c1 -v ~/data:/root/data_container centos:7
-
一個(gè)容器掛載多個(gè)目錄docker run -it --name=c2 -v ~/data2:/root/data2 -v ~/data3:/root/data3 centos:7
- 兩個(gè)容器掛載同一個(gè)數(shù)據(jù)卷docker run -it --name c3 -v ~/data:/root/data centos:7 docker run -it --name c4 -v ~/data:/root/data centos:7
- 在一個(gè)容器的data目錄下創(chuàng)建目錄 另一個(gè)容器的data目錄下能看到目錄
3.3.配置數(shù)據(jù)卷容器
-
查看容器綁定目錄情況 docker inspect c1
3.4.小結(jié)
4.Docker應(yīng)用部署
4.1.MySQL部署
docker search mysql
docker pull mysql:5.6
cd /opt
mkdir mysql
cd mysql
docker run -id \
-p 3307:3306 \
--name=c_mysql \
-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
-
進(jìn)入容器docker exec -it c_mysql /bin/bash 輸入用戶名 密碼 就可以輸入sql語(yǔ)句了
4.2.Tomcat部署
docker search tomcat
docker pull tomcat
mkdir /opt/tomcat
cd /opt/tomcat
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat
4.3.Nginx部署
mkdir /opt/nginx
cd /opt/nginx
mkdir conf
cd conf
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;
}
docker search nginx
docker pull nginx
啟動(dòng)ngnix 在/opt/nginx啟動(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
編寫html 直接訪問(wèn)http://116.62.133.122/
4.4.Redis部署
5.Dockerfile
5.1.Docker鏡像原理
- docker啟動(dòng)非常快的原因是docker用的宿主機(jī)的內(nèi)核(bootfs)
- 自己開(kāi)linux系統(tǒng)就很慢搅方,創(chuàng)建centos容器快比吭,安裝centos系統(tǒng)慢,docker做了一個(gè)復(fù)用腰懂。
- linux系統(tǒng)裝一個(gè)windows的docker是不行的梗逮,因?yàn)閮?nèi)核不一樣,不能復(fù)用绣溜。
- 下載tomcat鏡像,首先看有沒(méi)有jdk鏡像娄蔼,沒(méi)有的話先下載jdk,jdk又依賴基礎(chǔ)鏡像怖喻,還需要下基礎(chǔ)鏡像,這三個(gè)組合起來(lái)稱為tomcat鏡像岁诉,對(duì)外暴露的tomcat鏡像
- 文件疊加的好處:如果再下載centos鏡像锚沸,他也依賴基礎(chǔ)鏡像,如果基礎(chǔ)鏡像docker有涕癣,就不用下載了哗蜈,可以復(fù)用
- 疊加的操作叫統(tǒng)一文件系統(tǒng)
-
只讀意思不能改,改了別人就沒(méi)法復(fù)用了
5.2.Docker鏡像制作
- 容器改了一點(diǎn)東西坠韩,可以轉(zhuǎn)換成新的鏡像距潘,期望改的東西傳給其他人(tomcat部署了應(yīng)用)
- 新的鏡像如何傳給別人(測(cè)試人員),需要壓縮只搁,壓縮文件可以傳輸
- 測(cè)試人員把壓縮文件還原成鏡像音比,運(yùn)行即可
- docker里面的id使用的時(shí)候不用復(fù)制全,復(fù)制前幾位不重復(fù)即可
- 容器目錄掛載的東西(比如 tomcat下 webapps目錄有個(gè)項(xiàng)目test)氢惋,轉(zhuǎn)鏡像的時(shí)候不會(huì)寫入,通過(guò)數(shù)據(jù)卷的方式傳入的東西commit不會(huì)寫入
- 容器處理掛載的東西洞翩,其他目錄新建的文件在轉(zhuǎn)鏡像的時(shí)候稽犁,會(huì)寫入鏡像
docker ps -a
docker commit 1f04cab bj_tomcat:1.0
docker rmi 0c943f
進(jìn)入容器 在root目錄新建文件
docker exec -it c_tomcat bash
cd ~
touch b.txt
docker save -o bj_tomcat.tar bj_tomcat:1.0
當(dāng)前目錄 會(huì)有一個(gè)tar文件
刪除鏡像 然后把tar文件還原成鏡像
docker load -i bj_tomcat.tar
5.3.Dockerfile概念及作用
5.4.Dockerfile關(guān)鍵字
5.5.Docker案例1
mkdir docker-files
cd docker-files/
vim centos_dockerfile
FROM centos:7
MAINTAINER bj<bj910521@163.com>
RUN yum install -y vim
WORKDIR /usr
cmd /bin/bash
docker build -f ./centos_dockerfile -t bj_centos:1 .
5.6.Docker案例2
- 把springboot打成jar包,cmd運(yùn)行java -jar ./springboot-hello-0.0.1-SNAPSHOT.jar
- put F:\BaiduNetdiskDownload\5.階段五-流行框架\6.docker\代碼\springboot-hello-0.0.1-SNAPSHOT.jar
- mv springboot-hello-0.0.1-SNAPSHOT.jar docker-files/
- docker pull java:8 依賴的父鏡像骚亿,可以提前下已亥,也可以不下,如果機(jī)器沒(méi)有會(huì)自動(dòng)下的
FROM java:8
MAINTAINER bj<bj910521@163.com>
ADD springboot-hello-0.0.1-SNAPSHOT.jar app.jar
CMD java -jar app.jar
- docker build -f ./springboot_dockerfile -t app .
- docker run -id -p9000:8080 app 因?yàn)橹灰\(yùn)行 無(wú)需進(jìn)入 所以不起名字 系統(tǒng)默認(rèn)分配 端口要映射
- http://116.62.133.122:9000/hello
6.Docker服務(wù)編排
6.1.服務(wù)編排概念
6.2.Docker Compose概述
6.3.案例
# 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
curl -L https://get.daocloud.io/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
# 二進(jìn)制包方式安裝的,刪除二進(jìn)制文件即可
rm /usr/local/bin/docker-compose
使用docker compose編排nginx+springboot項(xiàng)目
mkdir ~/docker-compose
cd ~/docker-compose
#編寫 docker-compose.yml 文件
version: '3'
services:
nginx:
image: nginx
ports:
- 80:80
links:
- app
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
app:
image: app
expose:
- "8080"
#創(chuàng)建./nginx/conf.d目錄
mkdir -p ./nginx/conf.d
#在./nginx/conf.d目錄下 編寫itheima.conf文件
server {
listen 80;
access_log off;
location / {
proxy_pass http://app:8080;
}
}
#在~/docker-compose 目錄下 使用docker-compose 啟動(dòng)容器
docker-compose up
7.Docker私有倉(cāng)庫(kù)
7.1.搭建私有倉(cāng)庫(kù)
# 1嫂粟、拉取私有倉(cāng)庫(kù)鏡像
docker pull registry
# 2娇未、啟動(dòng)私有倉(cāng)庫(kù)容器
docker run -id --name=registry -p 5000:5000 registry
# 3、打開(kāi)瀏覽器 輸入地址http://私有倉(cāng)庫(kù)服務(wù)器ip:5000/v2/_catalog星虹,看到{"repositories":[]} 表示私有倉(cāng)庫(kù) 搭建成功
# 4零抬、修改daemon.json
vim /etc/docker/daemon.json
# 在上述文件中添加一個(gè)key,保存退出宽涌。此步用于讓 docker 信任私有倉(cāng)庫(kù)地址平夜;注意將私有倉(cāng)庫(kù)服務(wù)器ip修改為自己私有倉(cāng)庫(kù)服務(wù)器真實(shí)ip
{"insecure-registries":["私有倉(cāng)庫(kù)服務(wù)器ip:5000"]}
# 5、重啟docker 服務(wù)
systemctl restart docker
docker start registry
7.2.上傳鏡像到私有倉(cāng)庫(kù)
# 1卸亮、標(biāo)記鏡像為私有倉(cāng)庫(kù)的鏡像
docker tag centos:7 私有倉(cāng)庫(kù)服務(wù)器IP:5000/centos:7
# 2忽妒、上傳標(biāo)記的鏡像
docker push 私有倉(cāng)庫(kù)服務(wù)器IP:5000/centos:7
7.3.從私有倉(cāng)庫(kù)拉取鏡像
#拉取鏡像
docker pull 私有倉(cāng)庫(kù)服務(wù)器ip:5000/centos:7