柚子快報邀請碼778899分享:eureka Docker
柚子快報邀請碼778899分享:eureka Docker
目錄
docker原理
Docker如何解決不同系統(tǒng)環(huán)境的問題?
?鏡像:
容器:
Docker結構:
DockerHub:
Linux下載docker
第一步:卸載原來的docker(如果之前沒有就不卸載)
?第二步:安裝yum工具
第三步:更新本地鏡像源
第四步:輸入命令安裝docker-ce
啟動docker
第一步:關閉防火墻
第二步:啟動docker
配置鏡像源加速
第一步:創(chuàng)建docker目錄
第二步:在docker目錄下創(chuàng)建daemon.json文件
第三步:加載daemon.json文件
操作docker鏡像
1.查看docker的鏡像
2.拉取鏡像
3.把鏡像打包成文件
4.刪除鏡像
5.從文件中加載鏡像
示例
操作docker容器
創(chuàng)建并運行一個容器
?進入容器執(zhí)行操作
查看運行中的容器
查看所有的容器,包括停止的容器
暫停容器運行
?取消暫停容器
停止容器
從靜止到啟動容器
刪除容器
查看容器日志的命令
示例:?
在docker啟動redis
?數據卷
創(chuàng)建數據卷
查看所有數據卷
查看數據卷詳細信息卷?
刪除數據卷
?示例
掛載數據卷
查看數據卷指向的宿主機目錄
直接掛載宿主機目錄
我們這里使用mysql來舉例
第一步:關閉當前虛擬機正在運行的mysql,并設置開機不會自動啟動
第二步:拉取mysql
第三步:創(chuàng)建要直接掛載的目錄
第四步:創(chuàng)建容器并啟動
?編輯?第五步:測試連接
DockerCompose
下載dockercompse
修改文件權限?,增加執(zhí)行權限
增加Base自動補全命令
根據compose來創(chuàng)建并運行容器
注意:我們需要把正在運行的容器都刪除
切換到y(tǒng)ml文件所在目錄
?批量構建容器并啟動
docker原理
Docker如何解決不同系統(tǒng)環(huán)境的問題?
1.Docker將某個軟件的函數庫 依賴以及配置文件進行打包
2.Docker將當前軟件與所需要調用的系統(tǒng)(比如Ubuntu)函數庫一起打包3.Docker運行到不同操作系統(tǒng)時,直接基于打包的庫函數,借助于操作系統(tǒng)的Linux內核來運行
?鏡像:
Docker將應用程序以及所需的依賴,函數庫,環(huán)境,配置等文件打包在一起,稱之為鏡像
容器:
鏡像中的應用程序運行后形成的進程就是容器,只是Docker會對容器進行隔離,對外不可見
一個鏡像可以有多個容器
Docker結構:
Docker為cs結構
服務端:接受命令或者遠程請求,操作鏡像或容器客戶端:發(fā)送命令或者請求到Docker服務端?
DockerHub:
一個鏡像托管的服務器,這些服務器統(tǒng)稱為DockerRegistry
Linux下載docker
第一步:卸載原來的docker(如果之前沒有就不卸載)
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce
?第二步:安裝yum工具
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
第三步:更新本地鏡像源
# 設置docker鏡像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 添加docker鏡像相關依賴
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
# 刷新緩存
yum makecache fast
第四步:輸入命令安裝docker-ce
yum install -y docker-ce
啟動docker
第一步:關閉防火墻
# 關閉
systemctl stop firewalld
# 禁止開機啟動防火墻
systemctl disable firewalld
第二步:啟動docker
systemctl start docker # 啟動docker服務
systemctl stop docker # 停止docker服務
systemctl restart docker # 重啟docker服務
systemctl status docker # 檢查docker狀態(tài)
systemctl enable docker # 設置docker服務開機自啟
docker -v #查看docker版本
配置鏡像源加速
第一步:創(chuàng)建docker目錄
sudo mkdir -p /etc/docker
第二步:在docker目錄下創(chuàng)建daemon.json文件
cd /etc/docker
vim daemon.json
在寫文件中寫:?
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://hub.uuuadc.top",
"https://docker.anyhub.us.kg",
"https://dockerhub.jobcher.com",
"https://dockerhub.icu",
"https://docker.ckyl.me",
"https://docker.awsl9527.cn",
"https://mirror.baidubce.com"
]
}
第三步:加載daemon.json文件
sudo systemctl daemon-reload
sudo systemctl restart docker
操作docker鏡像
1.查看docker的鏡像
docker images
2.拉取鏡像
docker pull 鏡像名:tag #不寫tag默認是latest
3.把鏡像打包成文件
docker save -o 文件名.tar 鏡像名:tag #不寫tag默認是latest
4.刪除鏡像
docker rmi 鏡像名:tag #不寫tag默認是latest
5.從文件中加載鏡像
docker load -i 文件名.tar
示例
[root@localhost soft]# docker pull redis #拉取redis最新版本
[root@localhost docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 5ef79149e0ec 3 days ago 188MB
redis latest dae83f665c92 2 weeks ago 117MB
[root@localhost soft]# docker save -o redis.tar redis:latest #打包
[root@localhost soft]# docker rmi redis #刪除redis鏡像
[root@localhost soft]# docker load -i redis.tar #加載redis鏡像
操作docker容器
docker ps ?#查看所有運行中的容器以及其狀態(tài)
創(chuàng)建并運行一個容器
docker run --name containName -p 80:80 -d nginx
?docker run :創(chuàng)建并允許一個容器
--name:給容器起一個名字
-p:將宿主機端口號(Linux)于容器端口映射,冒號左邊是宿主機端口號(外部通過這個端口號來訪問),冒號右側是容器端口
-d:后臺運行容器
nginx:鏡像名
[root@localhost soft]# docker ps #查看所有運行中的容器以及其狀態(tài)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost soft]# docker images #查看所有鏡像
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 5ef79149e0ec 3 days ago 188MB
redis latest dae83f665c92 2 weeks ago 117MB
[root@localhost soft]# docker run --name mng -p 80:80 -d nginx:latest
48b3e6fed1278bda5bbc7dde5843fd9f25dfff8acb5dff07720d4e881a2ec72c
[root@localhost soft]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
48b3e6fed127 nginx:latest "/docker-entrypoint.…" 10 seconds ago Up 9 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp mng
?進入容器執(zhí)行操作
docker exec -it mng bash
docker exec:進入容器內步,執(zhí)行一個目錄
-it : 給當前進入的容器創(chuàng)建一個標準輸入,輸出終端,允許我們于容器交互
mng:要進入的容器的名字
bash:進入容器執(zhí)行的命令,bash是一個linux終端交互命令,即可以在容器內部使用linux部分命令
使用eixt命令退出容器?
查看運行中的容器
docker ps
查看所有的容器,包括停止的容器
docker ps -a
暫停容器運行
docker pause 容器名
?取消暫停容器
docker unpause 容器名
停止容器
docker stop 容器名
從靜止到啟動容器
docker start 容器名
刪除容器
docker rm 容器名 #只能刪除停止運行的容器,不能刪除運行中的容器
docker rm -f 容器名 #可以刪除運行中的容器
查看容器日志的命令
docker logs 容器名
docker logs -f 容器名 #持續(xù)查看容器日志
示例:?
[root@localhost soft]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
48b3e6fed127 nginx:latest "/docker-entrypoint.…" 10 seconds ago Up 9 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp mng
[root@localhost soft]# docker pause mng
mng
[root@localhost soft]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
48b3e6fed127 nginx:latest "/docker-entrypoint.…" 14 minutes ago Up 14 minutes (Paused) 0.0.0.0:80->80/tcp, :::80->80/tcp mng
[root@localhost soft]# docker unpause mng
mng
[root@localhost soft]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
48b3e6fed127 nginx:latest "/docker-entrypoint.…" 14 minutes ago Up 14 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp mng
[root@localhost soft]# docker stop mng
mng
[root@localhost soft]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost soft]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
48b3e6fed127 nginx:latest "/docker-entrypoint.…" 16 minutes ago Exited (137) 46 seconds ago mng
[root@localhost soft]# docker start mng
mng
[root@localhost soft]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
48b3e6fed127 nginx:latest "/docker-entrypoint.…" 16 minutes ago Up 20 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp mng
在docker啟動redis
docker run --name re -p 6379:6379 -d redis redis-server --appendonly yes
redis-server 啟動server
--appendonly yes:使用AOF持久化數據
?數據卷
數據卷是一個虛擬目錄,指向宿主機文件系統(tǒng)中的某個目錄
數據卷可以關聯(lián)者宿主機文件和多個容器的文件
這樣一來可以通過改變宿主機文件內容來修改 多個容器內文件的內容
作用:將容器與數據分離,解耦合,方便操作容器內數據,保證數據安全
創(chuàng)建數據卷
docker volume create html(數據卷名)
查看所有數據卷
docker volume ls
查看數據卷詳細信息卷?
docker volume inspect html
刪除數據卷
docker volume rm html
?示例
[root@localhost soft]# docker volume create html
html
[root@localhost soft]# docker volume ls
DRIVER VOLUME NAME
local 8cde3122c90e52a272b60ca9e264aebe7e0e94ac3f387adff7c32cd252a20551
local 084fcc577a0a264d73b1b5db87ec9cf4dbb10fd5247ddc2b4a7cbd76a12edabd
local 07188ec000d9c50f2a7e4b386a8a4964841e4aa43eecd752bc88ffb827cf9049
local html
[root@localhost soft]# docker volume inspect html
[
{
"CreatedAt": "2024-08-18T17:02:02+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/html/_data", #指向的宿主機目錄,里面沒有內容
"Name": "html",
"Options": null,
"Scope": "local"
}
]
掛載數據卷
docker run --name ng -p 80:80 -v html:/usr/share/nginx/html -d nginx
-v html:/usr/share/nginx/html
-v為掛載數據卷的參數,html是要掛載數據卷的名字,/usr/share/nginx/html是容器中html文件的目錄,這樣一來容器中html文件就與數據卷相互綁定
注意:如果沒有html這個數據卷,這個數據卷會自己創(chuàng)建出來
查看數據卷指向的宿主機目錄
[root@localhost _data]# docker volume inspect html
[
{
"CreatedAt": "2024-08-18T17:02:02+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/html/_data",
"Name": "html",
"Options": null,
"Scope": "local"
}
]
[root@localhost _data]# cd /var/lib/docker/volumes/html/_data
[root@localhost _data]# ll
總用量 8
-rw-r--r--. 1 root root 497 8月 12 22:21 50x.html
-rw-r--r--. 1 root root 632 8月 18 17:25 index.html
?我們可以發(fā)現原來數據卷指向目錄的內容增加了,說明已經把容器內html文件映射到宿主機的這個目錄當中了,接下來我們就可以自行修改index.html頁面的內容
?成功修改
直接掛載宿主機目錄
容器不僅僅可以掛載數據卷,也可以直接掛載到宿主機目錄上
關聯(lián)的關系如下:
1.帶數據卷模式:宿主機目錄->數據卷->容器內目錄
2.直接掛載模式:宿主機目錄->容器內目錄
我們這里使用mysql來舉例
第一步:關閉當前虛擬機正在運行的mysql,并設置開機不會自動啟動
[root@localhost volumes]# systemctl stop mysqld
[root@localhost volumes]# systemctl disable mysqld
Removed symlink /etc/systemd/system/multi-user.target.wants/mysqld.service.
[root@localhost volumes]# systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
8月 18 15:18:00 localhost.localdomain systemd[1]: Starting MySQL Server...
8月 18 15:18:12 localhost.localdomain systemd[1]: Started MySQL Server.
8月 18 17:44:47 localhost.localdomain systemd[1]: Stopping MySQL Server...
8月 18 17:44:49 localhost.localdomain systemd[1]: Stopped MySQL Server.
第二步:拉取mysql
docker pull mysql:5.7.25
?
第三步:創(chuàng)建要直接掛載的目錄
mkdir -p /tmp/mysql/data
第四步:創(chuàng)建容器并啟動
docker run --restart=always -p 3306:3306 --name mysql -v /tmp/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 -d mysql:5.7.25
說明:
1.--restart=always 表示當Docker重啟時,當前mysql容器總是重啟容器.如果不加,docker重啟,mysql不會重啟
2.-p 3306:3306 :port ,冒號前面的表示宿主機的端口號,冒號右邊的表示mysql容器端口號
3.--name mysql 表示當前的容器名
4.-v /tmp/mysql/data:/var/lib/mysql
1)-v [宿主機目錄]:[容器內目錄]
2)/tmp/mysql/data 表示宿主機目錄
3)/var/lib/mysql 表示data在容器中的位置,這個目錄是通過dockerhub官方查看的
?第五步:測試連接
mysql -h192.168.230.100 -P3306 -uroot -p1234
DockerCompose
DockerCompose可以基于Compose文件幫我們快速部署分布式應用,而無需一個個創(chuàng)建和運行容器
Compose文件是一個文本文件,通過指令定義集群中每個容器如何運行
下載dockercompse
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
修改文件權限?,增加執(zhí)行權限
chmod +x /usr/local/bin/docker-compose
增加Base自動補全命令
1.需要修改自己的hosts文件:
echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
2.補全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
# 查看系統(tǒng)中是否已經包含命令補齊腳本
ls /usr/share/bash-completion/completions/docker*
# 下載自動補齊工具
yum -y install bash-completion
# 讓自動補齊功能生效
source /usr/share/bash-completion/completions/docker
source /usr/share/bash-completion/bash_completion
根據compose來創(chuàng)建并運行容器
現在有一個compose-docker文件夾
yml文件內容
myweb-service文件夾是自己創(chuàng)建的鏡像
?Dockerfile文件,這是讓這個jar包生成鏡像的
注意:我們需要把正在運行的容器都刪除
[root@localhost docker-compose]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d545413832e7 mysql:5.7.25 "docker-entrypoint.s…" 4 hours ago Up 34 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
06db946465df redis "docker-entrypoint.s…" 5 hours ago Exited (0) 3 hours ago re
[root@localhost docker-compose]# docker rm -f mysql re
mysql
re
[root@localhost docker-compose]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
切換到y(tǒng)ml文件所在目錄
[root@localhost tmp]# cd docker-compose/
[root@localhost docker-compose]# pwd
/tmp/docker-compose
[root@localhost docker-compose]# ll
總用量 4
-rw-r--r--. 1 root root 434 8月 18 21:35 docker-compose.yml
drwxr-xr-x. 2 root root 39 8月 18 21:35 myweb-service
[root@localhost docker-compose]#
?批量構建容器并啟動
docker-compose up -d
up 表示創(chuàng)建并允許容器
-d 表示在后臺運行?
[root@localhost docker-compose]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5a676401d482 myweb:3.0 "/bin/sh -c 'java -j…" 13 seconds ago Up 11 seconds 0.0.0.0:8082->8090/tcp, :::8082->8090/tcp myweb_container
7c7382af3ce0 mysql:5.7.25 "docker-entrypoint.s…" 13 seconds ago Up 11 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql_container
生成了myweb鏡像
[root@localhost data]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myweb 3.0 765afd42f281 25 minutes ago 552MB
nginx latest 5ef79149e0ec 3 days ago 188MB
tomcat latest 70dd81c409f9 11 days ago 461MB
redis latest dae83f665c92 2 weeks ago 117MB
mysql 5.7.25 98455b9624a9 5 years ago 372MB
柚子快報邀請碼778899分享:eureka Docker
參考文章
本文內容根據網絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉載請注明,如有侵權,聯(lián)系刪除。