【云原生】-Docker容器技术小结
📢📢📢📣📣📣
哈嘍!大家好,我是【IT邦德】,江湖人稱jeames007,10年DBA工作經(jīng)驗(yàn)
一位上進(jìn)心十足的【大數(shù)據(jù)領(lǐng)域博主】!😜😜😜
中國DBA聯(lián)盟(ACDU)成員,目前從事DBA及程序編程
擅長主流數(shù)據(jù)Oracle、MySQL、PG 運(yùn)維開發(fā),備份恢復(fù),安裝遷移,性能優(yōu)化、故障應(yīng)急處理等。
? 如果有對(duì)【數(shù)據(jù)庫】感興趣的【小可愛】,歡迎關(guān)注【IT邦德】💞💞💞
??????感謝各位大可愛小可愛!??????
文章目錄
- 前言
- ?? 1.什么是Docker?
- ?? 2.安裝Docker
- ? 2.1 安裝依賴包
- ? 2.2 啟動(dòng) Docker
- ? 2.3 修改Docker存儲(chǔ)位置
- ?? 3.Docker常用命令
- ? 3.1 創(chuàng)建容器
- ? 3.2 進(jìn)入容器
- ? 3.3 其他
- ?? 4.Docker卸載
- ?? 5.Docker日常運(yùn)維
- ? 5.1 如何上傳鏡像到容器
- ? 5.2 docker 創(chuàng)建容器時(shí)指定容器ip
- ? 5.3 docker容器啟動(dòng)后添加端口映射
前言
以下為本人當(dāng)年初學(xué)Docker時(shí)做的筆記,一直在更新中,囊括了基本的知識(shí)點(diǎn),有時(shí)還翻出來查查, 是不是干貨,就看親們了。?? 1.什么是Docker?
可以簡單認(rèn)為,容器是一個(gè)超級(jí)輕量級(jí)的虛擬機(jī)(主機(jī)),容器和容器之間的進(jìn)程是相互隔離的。
Docker 利用容器(Container)獨(dú)立運(yùn)行的一個(gè)或一組應(yīng)用。
容器是用鏡像創(chuàng)建的運(yùn)行實(shí)例。
它可以被啟動(dòng)、開始、停止、刪除。每個(gè)容器都是相互隔離的、保證安全的平臺(tái)。
可以把容器看做是一個(gè)簡易版的 Linux 環(huán)境(包括root用戶權(quán)限、進(jìn)程空間、用戶空間和網(wǎng)絡(luò)空間等)
和運(yùn)行在其中的應(yīng)用程序。容器的定義和鏡像幾乎一模一樣,
也是一堆層的統(tǒng)一視角,
唯一區(qū)別在于容器的最上面那一層是可讀可寫的。
倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。
最大的公開倉庫是 Docker Hub:https://hub.docker.com,存放了數(shù)量龐大的鏡像供用戶下載。
國內(nèi)的公開倉庫包括阿里云 、網(wǎng)易云等
Docker 運(yùn)行在 CentOS 7 上,要求系統(tǒng)為64位、系統(tǒng)內(nèi)核版本為 3.10 以上。
Docker 運(yùn)行在 CentOS-6.5 或更高的版本的 CentOS 上,
要求系統(tǒng)為64位、系統(tǒng)內(nèi)核版本為 2.6.32-431 或者更高版本CentOS 7 的內(nèi)核一般都是3.10的,
而CentOS 6.X 的內(nèi)核一般都是2.6,
在2.6的內(nèi)核下,Docker運(yùn)行會(huì)比較卡,所以一般會(huì)選擇升級(jí)到3.10版本。
?? 2.安裝Docker
? 2.1 安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager
–add-repo
https://download.docker.com/linux/centos/docker-ce.repo
[root@centos7 ~] yum -y install docker-ce docker-ce-cli containerd.io
? 2.2 啟動(dòng) Docker
[root@centos7 ~]# systemctl enable docker
[root@centos7 ~]# systemctl start docker
[root@centos7 ~]# systemctl status docker
? 2.3 修改Docker存儲(chǔ)位置
默認(rèn)情況下 Docker的存放位置為:/var/lib/docker
可以通過命令查看具體位置:docker info | grep “Docker Root Dir”
首先停掉 Docker 服務(wù):
systemctl stop docker
然后移動(dòng)整個(gè)/var/lib/docker 目錄到目的路徑
mkdir -p /root/data
mv /var/lib/docker /root/data/docker
ln -s /root/data/docker /var/lib/docker --快捷方式
?? 3.Docker常用命令
📢📢📢 國內(nèi)鏡像:https://hub.daocloud.io/
📢📢📢 官方鏡像 https://hub.docker.com
? 3.1 創(chuàng)建容器
#從網(wǎng)絡(luò)拉取鏡像 docker pull centos:7.8.2003 # 創(chuàng)建一個(gè)容器,包括了 CentOS 7.8 運(yùn)行的一些基礎(chǔ)環(huán)境 #docker images --鏡像 REPOSITORY TAG IMAGE ID CREATED SIZE daocloud.io/library/centos 8.2.2004 831691599b88 7 months ago 215MB centos 7.8.2003 afb6fca791e0 8 months ago 203MBdocker run -d --name centos7.8 -h centos7.8 \ -p 220:22 -p 3387:3389 \ --privileged=true \ centos:7.8.2003 /usr/sbin/init#我想擁有一個(gè) linux 8.2 的環(huán)境 docker run -d --name centos8.2 -h centos8.2 \ -p 230:22 -p 3386:3389 \ --privileged=true \ daocloud.io/library/centos:8.2.2004 init? 3.2 進(jìn)入容器
docker exec -it centos7.8 bash docker exec -it centos8.2 bash cat /etc/redhat-release --查看系統(tǒng)版本#制作鏡像 docker commit centos7.8 centos7.8_test:1.0 --名稱+版本號(hào)? 3.3 其他
docker ps --查詢?nèi)萜?docker rm -f ***** --刪除容器(可以刪除多個(gè)) docker rmi mysql:1.0 --刪除鏡像 docker images --鏡像 docker images | grep centos --查詢鏡像 鏡像可以導(dǎo)入,也可以導(dǎo)入,用于生產(chǎn)環(huán)境 docker cp ***** centos7.8:/ --把宿主機(jī)的文件拷貝到docker容器中 docker stop centos7.8 --停止容器 systemctl restart docker --重啟所有的docker docker search ubuntu --查詢是否有鏡像 docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}" --格式化查詢 docker network connect *** MHA-MES-Master1-ip131 --添加指定的網(wǎng)卡 docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js /opt --拷貝容器的內(nèi)容到宿主機(jī) docker ps | grep -i mh --過濾查詢 如果創(chuàng)建時(shí)未指定 --restart=always ,可通過update 命令:docker update --restart=always centos7.8sudo docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2) sudo docker start $(docker ps -a | awk '{ print $1}' | tail -n +2) docker container update --restart=always 容器名字查看所有容器內(nèi)ip docker inspect --format='{{.NetworkSettings.IPAddress}}' $(docker ps -a -q)?? 4.Docker卸載
查看已安裝的docker
yum list installed | grep docker
運(yùn)行之后顯示如下:
[root@docker ~]# yum list installed | grep docker
containerd.io.x86_64 1.4.3-3.1.el7 @docker-ce-stable
docker-ce.x86_64 3:20.10.2-3.el7 @docker-ce-stable
docker-ce-cli.x86_64 1:20.10.2-3.el7 @docker-ce-stable
docker-ce-rootless-extras.x86_64 20.10.2-3.el7 @docker-ce-stable
依次刪除:
yum -y remove docker-ce.x86_64
yum -y remove docker-ce-cli.x86_64
yum -y remove containerd.io.x86_64
接著刪除docker儲(chǔ)存的文件、鏡像、容器…,該文件存放在 /var/lib/docker 目錄下:
rm -rf /var/lib/docker
?? 5.Docker日常運(yùn)維
? 5.1 如何上傳鏡像到容器
–停止容器
[root@jeames ~]# docker stop jemora11203
–從容器創(chuàng)建一個(gè)新的鏡像
docker commit jemora11203 jemora11g:11203
[root@jeames ~]# docker images
–用鏡像制作tag
docker tag jemora11g:11203 techerwang/oracle:ora11g11203
–上傳至官網(wǎng)
docker push techerwang/oracle:ora11g11203
? 5.2 docker 創(chuàng)建容器時(shí)指定容器ip
Docker創(chuàng)建容器時(shí)默認(rèn)采用bridge網(wǎng)絡(luò),自行分配ip,不允許自己指定。
在實(shí)際部署中,我們需要指定容器ip,不允許其自行分配ip,尤其是搭建集群時(shí),固定ip是必須的。
我們可以創(chuàng)建自己的bridge網(wǎng)絡(luò) : mynet,創(chuàng)建容器的時(shí)候指定網(wǎng)絡(luò)為mynet并指定ip即可
[root@docker ~]# docker network ls – 查看網(wǎng)絡(luò)模式
[root@docker ~]# docker network create --driver bridge --subnet=172.18.12.0/16 --gateway=172.18.1.1 mynet – 創(chuàng)建一個(gè)新的bridge網(wǎng)絡(luò)
[root@docker ~]# docker network inspect mynet --查看網(wǎng)絡(luò)信息
創(chuàng)建容器并指定容器ip
[root@docker ~]# docker run -d --name mysqlhost02 -h mysqlhost02
-p 223:22 -p 3407:3306
–network=mynet --ip 172.18.12.1
–privileged=true
centos:7.6.1810 /usr/sbin/init
? 5.3 docker容器啟動(dòng)后添加端口映射
#查看NAT表中的PREROUTING鏈
[root@centos7 ~]# iptables -t nat --list-rules PREROUTING
-P PREROUTING ACCEPT
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
iptables -t nat -A DOCKER -p tcp --dport 3316 -j DNAT --to-destination 172.17.0.3:3306
從上面可以看出,iptables將滿足條件的數(shù)據(jù)都轉(zhuǎn)發(fā)到了DOCKER鏈上去了。
#查看NAT表中的DOCKER鏈
iptables -t nat --list-rules DOCKER
另外一個(gè)方法
docker容器被創(chuàng)建后會(huì)在服務(wù)器上保存一個(gè)文件夾,
配置文件也放在此處,解決方法就是找到映射段都得配置文件修改就行了。
修改之前先停掉docker
$ systemcel stop docker
在 /var/lib/docker/containers/[容器ID]/下找到hostconfig.json
找到映射IP的位置,復(fù)制一個(gè)已映射的IP,修改為自己需要的就好(888是我新增的)
“PortBindings”: {
“888/tcp”: [
{
“HostIp”: “”,
“HostPort”: “888”
}
],
“21/tcp”: [
{
“HostIp”: “”,
“HostPort”: “21”
}
]
}
相同的目錄下找到config.v2.json,修改2處
“ExposedPorts”: {
“888/tcp”: {},
“21/tcp”: {}
}
“Ports”: {
“888/tcp”: [
{
“HostIp”: “0.0.0.0”,
“HostPort”: “888”
}
],
“21/tcp”: [
{
“HostIp”: “0.0.0.0”,
“HostPort”: “21”
}
]
}
修改完之后啟動(dòng)docker
$ systemctl start docker
執(zhí)行成功之后啟動(dòng)容器然后查看容器運(yùn)行狀態(tài)就可以看到新增加的端口在映射關(guān)系里已存在。
同理也可以去除端口映射。
總結(jié)
以上是生活随笔為你收集整理的【云原生】-Docker容器技术小结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 接收机动态范围,阻塞干扰,IQ平衡和镜像
- 下一篇: eplan连接定义点不显示_最新电气绘图