一攒钳、docker服務(wù)常見命令
安裝docker
yum -y install docker
1.查看docker版本
命令: docker -v
2.啟動docker
命令: systemctl start docker
3.關(guān)閉docker
命令: systemctl stop docker
4.看到docker運行狀態(tài)
命令: systemctl status docker (此時我已經(jīng)開啟了docker)
因為開啟了docker 所以會出現(xiàn)紅框中 active running
5.重啟docker
命令:systemctl restart docker
6.開機啟動docker
命令:systemctl enable docker
總結(jié):
二帮孔、docker鏡像相關(guān)命令
1.查看本地鏡像
命令: docker images
這里新裝的docker 本地沒有鏡像 所有只有表頭
2.搜索遠程鏡像
例如我們需要redis鏡像雷滋,首先我們?nèi)ゲ樵円幌率欠裼衦edis鏡像
命令:docker search redis
![image.png](https://upload-images.jianshu.io/upload_images/11123638-b4f83f8ce2f8b20c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240
3.拉取遠程鏡像
命令:docker pull redis:5.0 (名稱 :版本號)
這里(redis:5.0) :號后的為版本號不撑,如果不寫默認為最新 latest
下載完成后,再查看本地鏡像,redis 5.0 已經(jīng)下載到本地
這里注意:版本號不能亂寫,我們需要到 hub.docker.com 網(wǎng)址查找對應(yīng)的軟件版本號利诺,這里以redis為例子餐济。
這里看到 5.0 tag版本號是有的,不是亂寫的噪径。
4.刪除本地鏡像
本地已有鏡像
刪除指定鏡像 命令: docker rmi 鏡像ID
docker rmi 5a3c8e192943
注意:假如兩個鏡像的ID一樣,刪除命令可以用 docker rmi REPOSITORY:TAG
遇到如下錯誤,就可以使用這種方法:
了解:刪除所有的鏡像
總結(jié):
docker容器相關(guān)命令
容器由鏡像來產(chǎn)生腊敲,就好比鏡像是一個類,容器就是實例维苔。
1.查看容器碰辅、創(chuàng)建容器、進入容器
參數(shù)含義:
-i :一直保持運行介时,就是說客戶端沒有連接該容器没宾,該容器也會一直保持運行。
-t :一個終端沸柔,可以進入容器輸入一些命令 循衰,可以和i 連著寫-it
--name :給這個容器取一個名字
鏡像名:版本號 :以哪一個鏡像創(chuàng)建容器
/bin/bash :進入容器的一個初始化值
命令: docker run -it --name=c1 鏡像名:版本號 /bin/bash
表示已經(jīng)進入容器。@后就是容器的ID
查看容器里面的內(nèi)容:
退出容器:exit
查看docker 里面有哪些運行的容器:
命令: docker ps
注意:這里只有表頭褐澎,但是我們剛才 運行了一個redis容器為什么沒有会钝,應(yīng)為用 -it 這個命令創(chuàng)建運行的容器,在exit執(zhí)行以后工三,該容器會關(guān)閉迁酸。
命令: docker ps -a 關(guān)閉和沒關(guān)閉的容器都可以看到
第一種創(chuàng)建容器的特點:(終端)
1創(chuàng)建以后立馬進入該容器 2 exit執(zhí)行以后咽弦,會關(guān)閉該容器
第二種創(chuàng)建容器
參數(shù):d 后臺運行該容器。
特點:后臺運行胁出。1創(chuàng)建以后不會立馬進入容器型型,需要執(zhí)行命令才會進入該容器。2exit執(zhí)行以后全蝶,不會自動關(guān)閉該容器闹蒜。
命令:docker run -id --name=c2 redis:5.0
此時沒有進入容器 執(zhí)行 docker exec -it 容器名字 /bin/bash
退出容器,但是不關(guān)閉容器抑淫,容器依舊運行著
總結(jié):
4.啟動容器
先查看容器運行的狀態(tài)绷落,c2狀態(tài)為關(guān)閉,執(zhí)行 docker start 容器名
c2容器已經(jīng)啟動
5.停止容器
先查看容器運行的狀態(tài)
執(zhí)行停止命令: docker stop 容器名
此時c2容器已經(jīng)關(guān)閉始苇,狀態(tài)已經(jīng)為exited
6.刪除容器
注意:容器停掉以后砌烁,才能刪除容器
命令: docker rm 容器名 (以r1容器為例)
此時 r1已經(jīng)被刪除
根據(jù)所有的容器id刪除所有容器(如果出錯,請先關(guān)閉正在運行的容器)
docker rm
docker ps -aq
7.查看容器信息
命令: docker ps -aq 查看所有容器的id
命令:docker inspect 容器名 查看容器的信息
小結(jié):
三催式、docker容器的數(shù)據(jù)卷
1.數(shù)據(jù)卷 簡單理解為一個文件或者目錄
2.配置數(shù)據(jù)卷
注意:~相當于 root 函喉,宿主機中 可以寫~或者/root ,容器中必須寫為/root
命令:docker run -it --name=r1 -v ~/data:/root/data_container 鏡像名:版本號
在宿主機上:/root/data 下創(chuàng)建了一個hhb.txt
在容器里面/root/data_container 也有hhb.txt文件
刪掉了容器荣月,宿主機/root/data 下依然還有hhb.txt管呵。
docker數(shù)據(jù)卷容器
命令:docker run -it --name=c3 -v /volume redis:5.0 創(chuàng)建一個數(shù)據(jù)卷容器
命令:查看創(chuàng)建的c3容器的信息 docker inspect c3
這是我們創(chuàng)建兩個容器c1 c2 掛載到c3 容器上,如下都會有一個volume目錄
命令:docker run -it --name=c1 --volumes-from c3 redis:5.0 /bin/bash
命令:docker run -it --name=c2 --volumes-from c3 redis:5.0 /bin/bash
在c2容器 volume目錄下創(chuàng)建了一個test.txt文件
我們?nèi)1容器 volume目錄下查看是否有test.txt文件
數(shù)據(jù)卷小結(jié):
四哺窄、docker應(yīng)用部署
MySql部署
在docker容器中部署Mysql捐下,然后通過外部MySql客戶端去操作mysql。
1.搜索鏡像
docker search mysql
2.拉取Mysql鏡像
docker pull mysql:5.7
3.創(chuàng)建容器
docker run -id \
-p 3306: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.7
執(zhí)行:
進入到mysql容器內(nèi)部:
docker exec -it c_mysql /bin/bash
登錄mysql
mysql -uroot -p123456
3.操作容器中的MySql
我們隨意創(chuàng)建一個數(shù)據(jù)庫docker:
現(xiàn)在我們使用本機的mysql客戶端去連接:
如果連接失斆纫怠:
在虛擬機中執(zhí)行:vim /usr/lib/sysctl.d/00-system.conf坷襟,在末尾添加net.ipv4.ip_forward=1
然后重啟network服務(wù): systemctl restart network
重啟docker的mysql容器后就可以連接成功。
在客戶端 建user表插入兩條數(shù)據(jù)
在docker中mysql查看數(shù)據(jù)
tomcat部署
1.搜索tomcat鏡像
docker search tomcat
2.拉取tomcat鏡像(沒有指定版本號生年,默認下載是最新的)
docker pull tomcat
3.創(chuàng)建容器
4.部署項目
外部機器訪問tomcat
把打包的項目放在 /root/tomcat 目錄下婴程,如果訪問失敗,重啟docker容器晶框。
Nginx部署
1.搜索Nginx鏡像
docker search nginx
2.拉取Nginx鏡像
docker pull nginx
3.創(chuàng)建容器
首先我們需要創(chuàng)建一些目錄
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 ;
include /etc/nginx/conf.d/*.conf;
}
然后退出到nginx目錄下:
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目錄下創(chuàng)建index.html頁面
4.測試訪問
啟動 nginx 容器
Redis部署
1.搜索Redis鏡像
docker search redis
2.拉取Redis鏡像
docker pull redis:5.0
3.創(chuàng)建容器,設(shè)置端口映射
docker run -id --name=c_redis -p 6379:6379 redis:5.0
redis容器已經(jīng)啟動:
4.測試訪問
使用外部機器連接redis
在redis-cli.exe文件當前目錄下排抬,cmd,執(zhí)行一下命令:
redis-cli.exe -h reids服務(wù)器的ip地址 -p reids服務(wù)器的端口號
此時已經(jīng)連接上我們部署的redis服務(wù)器。我們可以進行一些簡單的操作授段。
五蹲蒲、Dockerfile (用來制造docker鏡像)
1.Docker 鏡像原理
總結(jié):
1.bootfs相當于系統(tǒng)的內(nèi)核,而我們創(chuàng)建啟動docker需要依賴操作系統(tǒng)侵贵,所以直接復(fù)用宿主機的內(nèi)核届搁,不用在加載,docker和宿主機的內(nèi)核共用一個,所以docker啟動會很快卡睦。
2.在內(nèi)核上我們可以疊加許多rootfs基礎(chǔ)鏡像宴胧,以及其他鏡像 比如這里 jdk,tomcat鏡像表锻。當我們?nèi)ハ螺dtomcat鏡像時恕齐,會查詢所需要的鏡像是否已經(jīng)下載,如果沒有瞬逊,就需要下載所需要的鏡像显歧,這里rootfs基礎(chǔ)鏡像以及 jdk鏡像。所以我們只下載tomcat鏡像時确镊,卻會下載幾百M的數(shù)據(jù)(rootfs基礎(chǔ)鏡像+ jdk鏡像)士骤。
3.當我們?nèi)ハ螺dngnix鏡像時,他需要去下載rootfs基礎(chǔ)鏡像蕾域,此時我們已經(jīng)下載過tomcat鏡像拷肌,rootfs基礎(chǔ)鏡像已經(jīng)被下載加載過了,就不需要再次下載rootfs基礎(chǔ)鏡像旨巷,達到了一個復(fù)用的作用巨缘。
4.只讀鏡像,這些鏡像不可以修改契沫,修改了別人就不能復(fù)用了带猴。
2.Dockerfile 概念及作用
Docker 鏡像如何制作?
一懈万、第一種
1.容器轉(zhuǎn)為鏡像
命令:docker commit 容器id 新的鏡像名稱:版本號
鏡像不可以傳輸給別人,但是可以變成壓縮文件傳給別人靶病。當我們一個容器(tomcat)部署了一個項目時会通,我們直接變成壓縮文件給測試人員,測試人員把壓縮文件轉(zhuǎn)為鏡像娄周,可以直接拿來測試涕侈,不需要再次部署項目。
2.鏡像轉(zhuǎn)為壓縮文件
o表示 output
命令:docker save -o 壓縮文件名稱 鏡像名稱:版本號
3.壓縮文件轉(zhuǎn)換為另一個鏡像
i代表:intput
命令:docker load -i 壓縮文件名稱
注意:
通過這種方式掛載的目錄文件會丟失煤辨,不是掛載目錄下文件不會丟失裳涛。
二、第二種 dockerfile
查看別人的dockerfile是怎么寫的找到對應(yīng)的版本直接點進去:以mysql5.7為例
https://github.com/docker-library/mysql/blob/ee33a2144a0effe9459abf02f20a6202ae645e94/5.7/Dockerfile.debian
3.Dockerfile 關(guān)鍵字語法
Dochub網(wǎng)址: https://hub.docker.com
4.案例
第一個案例:
自定義一個centos7鏡像众辨,要求:
1.默認登錄路徑為/usr
2.可以使用vim
實現(xiàn)步驟:
(1)定義父鏡像:FROM centos:7
(2)定義作者信息:MAINTAINER hhb hhb@it.cn
(3)執(zhí)行安裝vim命令:RUN yum install -y vim
(4)定義默認的工作目錄:WORKDIR /usr
(5)定義容器啟動執(zhí)行的命令:CMD /bin/bash
創(chuàng)建dockerfile文件:
執(zhí)行vim centos_dockerfile后輸入:
FROM centos:7
MAINTAINER hhb <hhb@it.cn>
RUN yum install -y vim
WORKDIR /usr
CMD /bin/bash
創(chuàng)建好centos_dockerfile文件后端三,使用build命令構(gòu)建鏡像:
最后的 . 代表尋找路徑
命令:docker build -f dockerfile文件路徑 -t 新鏡像的名稱:版本 .
正常方法使用自己創(chuàng)建的鏡像就行。
第二個案例:
步驟:
部署soringboot項目:
自己創(chuàng)建一個springboot項目鹃彻,打包成jar包
測試jar包是否有問題:
正常運行郊闯,說明打包的jar沒有問題。
把jar包放在linux系統(tǒng)的root目錄下:
把jar包放在docker-files目錄下,準備添加到我們自己創(chuàng)建的dockerfile中团赁,然后創(chuàng)建鏡像:
執(zhí)行vim springboot_dockerfile后輸入下面代碼:
FROM java:8 #定義父鏡像
MAINTAINER hhb <hhb@it.cn> #定義作者信息
ADD docker-0.0.1-SNAPSHOT.jar app.jar #將jar包添加到容器
CMD java -jar app.jar #定義容器啟動執(zhí)行的命令
通過dockerfile構(gòu)建鏡像: docker build -f dockerfile文件路徑 -t 鏡像名稱:版本
最后通過鏡像創(chuàng)建容器:
測試我們的app鏡像時候能訪問到springboot項目:
五育拨、Docker 服務(wù)編排
Docker Compose服務(wù)編排工具:
1.安裝docker compose
在安裝compose之前,需要先安裝docker欢摄,我們以編譯好的二進制方式安裝在Linux系統(tǒng)中
curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
設(shè)置文件可執(zhí)行權(quán)限
chmod +x /usr/local/bin/docker-compose
查看版本信息
docker-compose -version
2.卸載docker compose
二進制包方式安裝的熬丧,刪除二進制文件即可
rm /usr/local/bin/docker-compose
3.使用docker compose編排ngnix+springboot項目
(1)創(chuàng)建docker-compose目錄
mkdir ~/docker-compose
cd ~/docker-compose
(2)編寫docker-compose.yml文件 (文件必須為這個名字)
執(zhí)行 vim docker-compose.yml 命令后輸入下面內(nèi)容:
version: '3'
services:
ngnix:
image: nginx
ports:
- 80: 80
links:
- app
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
app:
image: app
expose:
- "8080"
含義解釋:
version: '3' //版本號
services: //我們要創(chuàng)建啟動哪些容器
ngnix: //容器1
image: nginx //通過哪個鏡像啟動锹引,這里是nginx鏡像嫌变,后面沒有寫版本號躬它,為latest
ports: //端口映射
- 80:80 //宿主機80端口映射到容器80端口腾啥, ‘-’ 這個符號代表數(shù)組的意思
links: //當前項目可以訪問到的其他項目
- app //對應(yīng)app項目
volumes: //目錄掛載,也就是數(shù)據(jù)卷
- ./nginx/conf.d:/etc/nginx/conf.d //宿主機./nginx/conf.d掛載到容器/etc/nginx/conf.d
app: //容器2
image: app //app鏡像我已經(jīng)在前面創(chuàng)建過了冯吓,包含了一個springboot項目
expose: //對外暴露的端口
- "8080"
(3)創(chuàng)建./nginx/conf.d目錄
mkdir -p ./nginx/conf.d
(4)在./nginx/conf.d目錄下編寫hhb.conf文件
listen 80; 監(jiān)聽的端口
access_log off; 日志關(guān)閉
location / {
proxy_pass http://app:8080; //反向代理到的路徑
}
server{
listen 80;
access_log off;
location / {
proxy_pass http://app:8080;
}
}
(5)退出到docker-compose.yml文件所在的目錄后倘待,直接啟動
在瀏覽器中訪問linux系統(tǒng)ip地址:80端口
訪問http://192.168.0.105/hello這里hello是我在springboot項目中中寫的一個controller,然后返回的hello my dockerfile這段文字组贺。
六凸舵、Docker 私有倉庫
1.搭建私有倉庫
當我們的服務(wù)器無法訪問互聯(lián)網(wǎng),或者不想把我們的鏡像上傳到公網(wǎng)上失尖,就可以搭建一個私有倉庫
(1)拉取私有倉庫鏡像
docker pull registry
(2)啟動私有倉庫
docker run -id --name=registry -p 5000:5000 registry
(3)打開瀏覽器 輸入地址http://私有倉庫服務(wù)器ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有倉庫 搭建成功
(4)修改daemon.json
追加下面內(nèi)容阿里鏡像加速器
vim /etc/docker/daemon.json
在上述文件中國添加一個key啊奄,保存退出。此步用于讓docker 信任私有倉庫地址掀潮;注意私有倉庫服務(wù)器ip修改為自己私有倉庫服務(wù)器真是ip
{"insecure-registries": ["私有倉庫服務(wù)器ip:5000"]}
(5)重啟docker 服務(wù)
systemctl restart docker
執(zhí)行測試:
這里私有倉庫已搭建成功,要讓我們的私有倉庫能用庄新,必須讓docker信任我們的私有倉庫。
2.上傳鏡像到私有倉庫
(1)標記鏡像為私有倉庫的鏡像
docker tag centos:7 私有倉庫服務(wù)器ip:5000/centos:7
(2)上傳標記的鏡像
注意:1刪除標記的鏡像使用鏡像的名稱來刪除恶迈,使用id的話副渴,會發(fā)現(xiàn)被標記的鏡像和生成的標記鏡像id相同 2記得啟動創(chuàng)建的registry私有倉庫容器,不然上傳會報錯勉盅,連接拒絕。
docker push 私有倉庫服務(wù)器ip:5000/centos:7
3.從私有倉庫拉取鏡像
方便測試簿透,我們先刪除生成的標記對象
拉取命令:
docker pull 私有倉庫鏡像名稱:版本號