引出
1.認(rèn)識(shí)docker,docker和虛擬機(jī)對(duì)比;
2.docker的架構(gòu),客戶端,鏡像,容器,倉(cāng)庫(kù);
3.docker常用的命令,docker exec,inspect,ps;
4.Linux安裝docker,更換鏡像源,ipv4轉(zhuǎn)發(fā)開啟;
Docker是啥?
Docker是啥?
Docker是一個(gè)開源的應(yīng)用容器引擎,開發(fā)者可以打包自己的應(yīng)用到容器里面,然后遷移到其他機(jī)器的docker應(yīng)用中,可以實(shí)現(xiàn)快速部署。
Docker利用容器(Container)來運(yùn)行應(yīng)用。容器是從鏡像創(chuàng)建的運(yùn)行實(shí)例。它可以被啟動(dòng)、開始、停止、刪除。每個(gè)容器都是相互隔離的、保證安全的平臺(tái)。
可以把容器看成是一個(gè)簡(jiǎn)易版的Linux環(huán)境(包括ROOT用戶權(quán)限、進(jìn)程空間、用戶空間、網(wǎng)絡(luò)等)和運(yùn)行在其中的應(yīng)用程序。
Docker 是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的鏡像中,然后發(fā)布到任何流行的 Linux或Windows 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。
Docker的英文翻譯是”搬運(yùn)工“的意思,他搬運(yùn)的東西就是我們常說的集裝箱Container,Container 里面裝的是任意類型的App,我們的開發(fā)人員可以通過Docker 將App變成一種標(biāo)準(zhǔn)化的、可移植的、自管理的組件,我們可以在任何主流的操作系統(tǒng)中開發(fā)、調(diào)試和運(yùn)行。
簡(jiǎn)單的理解,docker就是一個(gè)軟件集裝箱化平臺(tái),就像船只、火車、卡車運(yùn)輸集裝箱而不論其內(nèi)部的貨物一樣,軟件容器充當(dāng)軟件部署的標(biāo)準(zhǔn)單元,其中可以包含不同的代碼和依賴項(xiàng)。
按照這種方式容器化軟件,開發(fā)人員和 IT 專業(yè)人員只需進(jìn)行極少修改或不修改,即可將其部署到不同的環(huán)境,如果出現(xiàn)的故障,也可以通過鏡像,快速恢復(fù)服務(wù)。
Docker VS 虛擬機(jī)
1.特性優(yōu)勢(shì)
Docker | VMware | |
---|---|---|
虛擬化 | 輕量級(jí)虛擬化(只虛擬出來容器所需要的資源,軟件層面) | 完全虛擬化(虛擬化硬件) |
啟動(dòng)速度 | 秒級(jí) | 分鐘級(jí) |
運(yùn)行性能 | 接近原生 | 5%左右損失 |
磁盤占用 | MB | GB |
數(shù)量 | 成百上千 | 一般幾十臺(tái) |
隔離性 | 進(jìn)程級(jí)別 | 系統(tǒng)級(jí)(更徹底) |
操作系統(tǒng) | 主要支持Linux | 幾乎所有 |
封裝程度 | 只打包項(xiàng)目代碼和依賴關(guān)系,共享宿主機(jī)內(nèi)核 | 完整的操作系統(tǒng) |
2.資源優(yōu)勢(shì)
Docker的架構(gòu)
Client(客戶端):是Docker的用戶端,可以接受用戶命令和配置標(biāo)識(shí),并與Docker daemon通信。
Images(鏡像):是一個(gè)只讀模板,含創(chuàng)建Docker容器的說明,它與操作系統(tǒng)的安裝光盤有點(diǎn)像。
Containers(容器):鏡像的運(yùn)行實(shí)例,鏡像與容器的關(guān)系類比面向?qū)ο笾械念惡蛯?duì)象。
Registry(倉(cāng)庫(kù)):是一個(gè)集中存儲(chǔ)與分發(fā)鏡像的服務(wù)。最常用的Registry是官方的Docker Hub 。
Docker常用命令
Docker command line
拉取MySQL的docker鏡像流程
(0)docker run
docker run
- -i:以交互模式運(yùn)行容器
- -t:為容器重新分配一個(gè)偽輸入終端
- —name :容器名稱
- —privileged: 設(shè)置容器公開權(quán)限(默認(rèn)為true)
- -p :映射端口 linux端口: 容器內(nèi)置端口(mysql默認(rèn)端口為3306)
- -v : linux掛載文件夾/文件和容器內(nèi)路徑的映射
- -e: 容器的環(huán)境變量(設(shè)置mysql默認(rèn)用戶名&密碼)
- -d: 后臺(tái)運(yùn)行容器,并返回容器ID
docker run -it \
--name mysql_3306 \
--privileged \
-p 3306:3306 \
-v /usr/local/software/mysql/3306/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/software/mysql/3306/data:/var/lib/mysql \
-v /usr/local/software/mysql/3306/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123 \
-d mysql
(1)docker ps
ps——process進(jìn)程
(2)docker stop + 容器名稱
停止容器
(3)docker ps -a
查看啟動(dòng)過的容器,所有容器
(4)docker restart/start
(5)docker rm + 容器名稱
刪除指定的容器
docker image rm + 鏡像名字
先停止后刪除
(6)docker image ls
查看鏡像的名稱
(7)docker search 鏡像名稱
從docker庫(kù)中搜索docker的鏡像
根據(jù)版本搜索 docker search mysql:5
(8)docker pull 鏡像名稱
從docker庫(kù)中拉取鏡像
(9)docker logs 容器名稱
docker 日志,查看容器運(yùn)行時(shí)的日志
(10)docker inspect 查詢?nèi)萜鲀?nèi)部的ip地址
docker inspect mysql_3306
進(jìn)行流處理,管道,過濾
docker inspect mysql_3306 | grep IP
[root@localhost ~]# docker inspect mysql_3306 |grep IPA
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAMConfig": null,
"IPAddress": "172.17.0.2",
(11)docker exec進(jìn)入容器內(nèi)部
docker exec -it 容器名稱 bash
進(jìn)入容器實(shí)質(zhì)上也是進(jìn)入了一個(gè)linux環(huán)境。
docker exec
- -it:以交互模式運(yùn)行容器 ,為容器重新分配一個(gè)偽輸入終端。
- bash: bash(GNU Bourne-Again Shell)是最常用的一種shell(運(yùn)行在終端的互動(dòng)程序)。
附錄:把容器名字改一下
問題:進(jìn)入容器顯示bash-4.4的解決方案
進(jìn)入容器后輸入以下兩個(gè)命令
cp /etc/skel/.bashrc /root/
cp /etc/skel/.bash_profile /root/
退出容器后再次進(jìn)入
bash-4.4# cp /etc/skel/.bashrc /root/
bash-4.4# cp /etc/skel/.bash_profile /root/
bash-4.4# exit
exit
[root@localhost 3306]# docker exec -it mysql_3306 bash
[root@ed5404afb218 /]#
Docker進(jìn)階命令
定義靜態(tài)網(wǎng)段
[root@localhost conf]# docker network ls
NETWORK ID NAME DRIVER SCOPE
480a87f5e493 bridge bridge local
76aceec0d608 host host local
79544eec7527 none null local
[root@localhost conf]#
自定義docker的靜態(tài)網(wǎng)段,關(guān)機(jī)重啟,不會(huì)改變r(jià)edis的ip
docker network create --driver bridge --subnet=172.18.12.0/16 --gateway=172.18.1.1 pet_docker_net
[root@localhost conf]# docker network ls
NETWORK ID NAME DRIVER SCOPE
480a87f5e493 bridge bridge local
76aceec0d608 host host local
79544eec7527 none null local
[root@localhost conf]# docker network create --driver bridge --subnet=172.18.12.0/16 --gateway=172.18.1.1 pet_docker_net
9d04811dfd2a959c8e653cc1c0edf056f4dbd6c98af8bef0c7c23fad840cf84e
[root@localhost conf]# docker network ls
NETWORK ID NAME DRIVER SCOPE
480a87f5e493 bridge bridge local
76aceec0d608 host host local
79544eec7527 none null local
9d04811dfd2a pet_docker_net bridge local
[root@localhost conf]#
拷貝文件
(1)centos拷貝到docker容器
docker cp ./rabbitmq_delayed_message_exchange-3.9.0.ez rabbitmq_pet:/plugins
(2)容器拷貝到centos
容器內(nèi)配置文件的位置/etc/my.conf,拷貝到centos
[root@192 mysql]# docker cp mysql_3306_try:/etc/my.cnf my.cnf
[root@192 mysql]# mv conf ./3310/conf/
[root@192 mysql]# ls
3306 3310
容器內(nèi)配置文件的位置/etc/my.cnf,拷貝到centos下
Linux的centos中安裝docker
刪除之前的docker后安裝
停止docker服務(wù)
[root@localhost ~]# systemctl stop docker
查詢安裝的docker服務(wù)
[root@localhost ~]# yum list installed |grep docker
刪除docker的組件
[root@localhost ~]# yum -y remove docker-*
刪除docker文件夾
[root@localhost ~]# rm -rf /var/lib/docker
安裝docker
使用yum安裝docker不適用官方的安裝方式,發(fā)現(xiàn):官方的安裝方式容器中的內(nèi)容不完整。
[root@localhost ~]# yum install -y docker
啟動(dòng)docker
[root@localhost ~]#
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker -v
Docker version 1.13.1, build 7d71120/1.13.1
image-20230608120142044
設(shè)置docker在linux啟動(dòng)時(shí)啟動(dòng)
systemctl enable docker
配置本地鏡像庫(kù)
從網(wǎng)絡(luò)獲取docker鏡像太慢,設(shè)置阿里云的鏡像庫(kù)。
修改:/etc/docker/daemon.json文件
[root@localhost ~]# vim /etc/docker/daemon.json
[root@localhost ~]# cat /etc/docker/daemon.json
{
"registry-mirrors":["https://ung2thfc.mirror.aliyuncs.com"]
}
[root@localhost ~]# systemctl restart docker
docker常見問題
1.容器中沒有l(wèi)inux命令
當(dāng)使用linux命令時(shí),顯示“command not found”。
問題描述
解決方案
(1)更新容器中l(wèi)inux
apt-get update
root@1aba593b6c47:/etc/mysql# apt-get update
(2)安裝程序
apt-get install 命令
root@130dddbf14ee:/# apt-get install vim
2.容器中下載緩慢
問題描述
運(yùn)行apt-get update 時(shí)顯示錯(cuò)誤:
Err:1 http://deb.debian.org/debian buster InRelease 。
解決方案
編輯 /etc/docker/daemon.json, 修改dns
[root@localhost ~]# vim /etc/docker/daemon.json
{
"registry-mirrors":["https://ung2thfc.mirror.aliyuncs.com"]
}
{
"dns":["114.114.114.114","8.8.8.8"]
}
重啟docker
[root@localhost ~]# systemctl restart docker
單純下載緩慢,輸入下面命令解決
輸入下面命令,設(shè)置鏡像源
vim /etc/docker/daemon.json
{"registry-mirrors":["https://ung2thfc.mirror.aliyuncs.com"]}
cat /etc/docker/daemon.json
3.IPv4轉(zhuǎn)發(fā)已禁用問題
問題描述
解決方案
[root@localhost master]# vim /etc/sysctl.conf
navicat連接mysql的docker時(shí)報(bào)錯(cuò):
該問題可能是ipv4端口沒開導(dǎo)致的
放開ipv4端口,重啟網(wǎng)絡(luò)
vim /etc/sysctl.conf
systemctl restart network
可以重啟一下docker,選做
刪除容器,再重新啟動(dòng)一下docker文章來源:http://www.zghlxwxcb.cn/news/detail-567695.html
systemctl restart docker
docker ps -a
docker rm mysql
docker run -itd --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123 docker.io/mysql
總結(jié)
1.認(rèn)識(shí)docker,docker和虛擬機(jī)對(duì)比;
2.docker的架構(gòu),客戶端,鏡像,容器,倉(cāng)庫(kù);
3.docker常用的命令,docker exec,inspect,ps;
4.Linux安裝docker,更換鏡像源,ipv4轉(zhuǎn)發(fā)開啟;文章來源地址http://www.zghlxwxcb.cn/news/detail-567695.html
到了這里,關(guān)于Docker——認(rèn)識(shí)Docker & 常用命令 & Linux中安裝docker & 常見問題及其解決的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!