【Docker】Docker容器搭建及基本使用

Docker 是一個(gè)開(kāi)源的應(yīng)用容器引擎,基于 Go 語(yǔ)言 并遵從 Apache2.0 協(xié)議開(kāi)源。
Docker 可以讓開(kāi)發(fā)者打包他們的應(yīng)用以及依賴包到一個(gè)輕量級(jí)、可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。
容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口(類似 iPhone 的 app),更重要的是容器性能開(kāi)銷極低。
Docker 從 17.03 版本之后分為 CE(Community Edition: 社區(qū)版) 和 EE(Enterprise Edition: 企業(yè)版)

目錄

  • 一、安裝環(huán)境
  • 二、Docker安裝
  • 三、Docker基本使用
  • 四、Docker安裝CentOS
  • 五、Docker安裝MySQL
  • 六、Docker安裝Tomcat
  • 七、Docker GUI管理
  • 八、參考并致謝

一、安裝環(huán)境

操作系統(tǒng):CentOS 7(建議用7或以上,因?yàn)?版本有部分功能不兼容)

二、Docker安裝

1、卸載舊版本
[root@bogon ~]# yum remove docker \
        docker-client \
        docker-client-latest \
        docker-common \
        docker-latest \
        docker-latest-logrotate \
        docker-logrotate \
        docker-engine
2、安裝所需軟件包
[root@bogon ~]# yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
3、設(shè)置倉(cāng)庫(kù)
[root@bogon ~]# yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
4、安裝最新版本
[root@bogon ~]# yum install docker-ce docker-ce-cli containerd.io

如果不是安裝最新版本可以使用以下步驟:
查看可用版本:

[root@bogon ~]# yum list docker-ce --showduplicates | sort -r

然后使用命令安裝對(duì)應(yīng)得版本:

[root@bogon ~]# yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

-- 如:yum install docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io
5、安裝完后啟動(dòng)
[root@bogon ~]# systemctl start docker
6、驗(yàn)證
[root@bogon ~]# docker run hello-world

root@0316378d2b63:/#

三、Docker基本使用

1、容器的使用

直接輸入docker命令可查看到docker命令的選項(xiàng)

啟動(dòng)容器

使用以下命令啟動(dòng)一個(gè)容器:

[root@bogon ~]# docker run -it ubuntu /bin/bash

參數(shù)說(shuō)明:
-i: 交互式操作。
-t: 終端。
ubuntu: ubuntu 鏡像。
/bin/bash:放在鏡像名后的是命令,這里我們希望有個(gè)交互式 Shell,因此用的是 /bin/bash。

如果需要退出則直接輸入exit命令即可

如果需要后臺(tái)運(yùn)行可加上-d參數(shù)

[root@bogon ~]# docker run -itd --name ubuntu-test ubuntu /bin/bash

其中,-name是指定容器的名字,名字可以自定義

查看所有容器
[root@bogon ~]# docker ps -a
啟動(dòng)、關(guān)閉、重啟一個(gè)已存在的容器
-- 啟動(dòng)  
[root@bogon ~]# docker start <容器ID>  
-- 停止  
[root@bogon ~]# docker stop <容器ID>  
-- 重啟 
[root@bogon ~]# docker restart <容器ID>   
進(jìn)入和退出在后臺(tái)運(yùn)行的容器
-- 進(jìn)入容器
[root@bogon ~]# docker attach <容器ID>   
-- 退出容器且不關(guān)閉
[root@bogon ~]# docker exec 
導(dǎo)入和導(dǎo)出容器
-- 導(dǎo)出
[root@bogon ~]# docker export <容器ID> > 導(dǎo)出路徑 
如:docker export 1e560fca3906 > ubuntu.tar

-- 導(dǎo)入  
[root@bogon ~]# cat 路徑 | docker import - 鏡像名:標(biāo)簽名 
如:cat docker/ubuntu.tar | docker import - test/ubuntu:v1
刪除容器
[root@bogon ~]# docker rm -f <容器ID>

清空所有處于終止?fàn)顟B(tài)的容器:

[root@bogon ~]# docker container prune
使用容器運(yùn)行一個(gè)web應(yīng)用

載入鏡像和啟動(dòng)容器

-- 載入鏡像
[root@bogon ~]# docker pull training/webapp  
-- 運(yùn)行容器(其中P參數(shù)將容器內(nèi)部使用的網(wǎng)絡(luò)端口映射到我們使用的主機(jī)上)
[root@bogon ~]# docker run -d -P training/webapp python app.py

查看容器狀態(tài):

[root@bogon ~]# docker ps  


此時(shí)發(fā)現(xiàn)多了端口的信息,docker開(kāi)放了5000端口,映射到了主機(jī)的9001端口上,此時(shí)我們可以在瀏覽器訪問(wèn)應(yīng)用:

可以通過(guò) -p 參數(shù)來(lái)配置端口

[root@bogon ~]# docker run -d -p 5000:5000 training/webapp python app.py

查看web應(yīng)用程序的日志

-- 其中-f讓docker logs像tail -f一樣輸出
[root@bogon ~]# docker logs -f <容器ID或名字>

查看web應(yīng)用程序容器的進(jìn)程

[root@bogon ~]# docker top <容器ID或名字>

使用docker inspect來(lái)檢查docker底層信息,它會(huì)返回一個(gè)json文件記錄著容器的配置和狀態(tài)信息

[root@bogon ~]# docker inspect <容器ID或名字>

停止、重啟、移除web應(yīng)用容器

-- 停止 
[root@bogon ~]# docker stop <容器ID或名字>
-- 重啟
[root@bogon ~]# docker restart <容器ID或名字>
-- 移除(移除前必須停止)
[root@bogon ~]# docker rm <容器ID或名字>
2、鏡像的使用
列出所有本地主機(jī)上的鏡像
[root@bogon ~]# docker images

列表各個(gè)列說(shuō)明:
REPOSITORY:表示鏡像的倉(cāng)庫(kù)源

TAG:鏡像的標(biāo)簽
IMAGE ID:鏡像ID
CREATED:鏡像創(chuàng)建時(shí)間
SIZE:鏡像大小

說(shuō)明:同一倉(cāng)庫(kù)可以有多個(gè)TAG,代表這個(gè)倉(cāng)庫(kù)源的不同個(gè)版本,如 ubuntu 倉(cāng)庫(kù)源里,有 15.10、14.04 等多個(gè)不同的版本,我們使用 REPOSITORY:TAG 來(lái)定義不同的鏡像。所以,我們?nèi)绻褂冒姹緸?5.10的ubuntu系統(tǒng)鏡像來(lái)運(yùn)行容器時(shí),命令如下:

[root@bogon ~]# docker run -t -i ubuntu:15.10 /bin/bash 

如果不指定一個(gè)鏡像的版本標(biāo)簽,例如只使用 ubuntu,docker 將默認(rèn)使用 ubuntu:latest 鏡像。

獲取新鏡像
[root@bogon ~]# docker pull REPOSITORY:TAG
如:docker pull ubuntu:13.10
查找鏡像

第一種方法是在docker hub網(wǎng)站上找:https://hub.docker.com/
第二種方法是使用docker search命令來(lái)搜索

-- 如我們需要一個(gè)httpd的鏡像來(lái)作為web服務(wù)
[root@bogon ~]# docker search httpd

列表各列說(shuō)明:
NAME: 鏡像倉(cāng)庫(kù)源的名稱
DESCRIPTION: 鏡像的描述

OFFICIAL: 是否 docker 官方發(fā)布
stars: 類似 Github 里面的 star,表示點(diǎn)贊、喜歡的意思。
AUTOMATED: 自動(dòng)構(gòu)建。

拖取鏡像
-- 拖取httpd鏡像
[root@bogon ~]# docker pull httpd

拖取下來(lái)之后就可以使用這個(gè)鏡像了

[root@bogon ~]# docker run httpd
刪除鏡像
-- 刪除httpd鏡像
[root@bogon ~]# docker rmi httpd
構(gòu)建鏡像

構(gòu)建鏡像需要我們從零開(kāi)始創(chuàng)建一個(gè)鏡像,構(gòu)建鏡像分為手動(dòng)構(gòu)建和自動(dòng)構(gòu)建,這里我們采用Dockerfile自動(dòng)構(gòu)建的方式來(lái)構(gòu)建鏡像,因此,我們需要?jiǎng)?chuàng)建一個(gè)DockerFile文件,其中包含一組指令來(lái)告訴docker如何構(gòu)建我們的鏡像

-- 創(chuàng)建docker使用的目錄來(lái)規(guī)劃存放dockerfile文件的目錄(此步可忽略)
[root@bogon ~]# mkdir /home/docker
[root@bogon ~]# cd /home/docker
-- 創(chuàng)建文件需要注意的是:D需要大寫(xiě),當(dāng)我們構(gòu)建鏡像的時(shí)候docker默認(rèn)選取當(dāng)前目錄下的Dockerfile文件
[root@bogon ~]# vim DockerFile

然后在Dockerfile文件加入以下內(nèi)容:

FROM    centos:6.7
MAINTAINER      Catke "catke@qq.com"

RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd catke
RUN     /bin/echo 'catke:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D

注意:每個(gè)指令都會(huì)在鏡像上創(chuàng)建一個(gè)新的層,每個(gè)指令前綴都是大寫(xiě),其中第一條FROM指定使用哪個(gè)鏡像源,RUN指令告訴docker在鏡像內(nèi)執(zhí)行命令,如安裝了什么,需要添加什么用戶

Dockerfile文件參數(shù)說(shuō)明:
FROM (指定基礎(chǔ)鏡像)
MAINTAINER (指定維護(hù)者信息)
RUN (在命令前面加上RUN)
ADD (COPY文件,會(huì)自動(dòng)解壓,無(wú)法復(fù)制tar壓縮文件,從上下文目錄中復(fù)制文件或者目錄到容器里指定路徑,同等需求下,官方推薦使用COPY來(lái)實(shí)現(xiàn))
WORKDIR (設(shè)置當(dāng)前工作目錄,類似于cd)
VOLUME (設(shè)置卷,掛載主機(jī)目錄)
EXPOSE (指定對(duì)外的端口)
CMD (指定容器啟動(dòng)后要干的事情)

然后我們使用Dockerfile文件,通過(guò)docker build命令來(lái)構(gòu)建一個(gè)鏡像

-- 說(shuō)明:-t參數(shù)后面跟著的是REPOSITORY:TAG的格式,最后的“.”不要漏了,當(dāng)然你可以修改構(gòu)建的位置,“.”代表的是當(dāng)前目錄,
[root@bogon docker]# docker build -t centos:6.7 .

構(gòu)建完之后結(jié)果如下:



可以使用docker images命令來(lái)查看當(dāng)前的鏡像

然后我們使用這個(gè)鏡像來(lái)啟動(dòng)一個(gè)容器,并且驗(yàn)證我們剛剛文件里面寫(xiě)的創(chuàng)建catke用戶,結(jié)果如下:

創(chuàng)建鏡像

當(dāng)docker鏡像庫(kù)中的鏡像不能滿足我們的需求時(shí),我們可以通過(guò)兩種方式對(duì)鏡像進(jìn)行修改:
1、從已經(jīng)創(chuàng)建的容器中更新鏡像,并提交這個(gè)鏡像
2、使用dockerfile指令來(lái)創(chuàng)建一個(gè)新的鏡像

設(shè)置鏡像標(biāo)簽

以剛剛構(gòu)建的鏡像為例

-- 將IMAGE ID為0fc552672063的鏡像的tag設(shè)置為test(說(shuō)明,一個(gè)鏡像可以對(duì)應(yīng)多個(gè)tag)
[root@bogon ~]# docker tag 0fc552672063 centos:test
3、容器連接
端口映射

端口映射可以使用-p或者-P參數(shù)來(lái)實(shí)現(xiàn),其中,-P是容器內(nèi)部端口隨機(jī)映射到主機(jī)端口,-p是容器內(nèi)部端口綁定到主機(jī)端口

-- 創(chuàng)建一個(gè)python應(yīng)用容器,并將容器內(nèi)部端口隨機(jī)映射到主機(jī)端口  
[root@bogon docker]# docker run -d -P training/webapp python app.py
-- 查看容器情況
[root@bogon docker]# docker ps

可以看到當(dāng)前容器端口9000綁定了5000端口

-- 創(chuàng)建一個(gè)python應(yīng)用容器,并將容器內(nèi)部端口綁定映射到主機(jī)端口  
[root@bogon docker]# docker run -d -p 5000:5000 training/webapp python app.py
-- 查看容器情況
[root@bogon docker]# docker ps

同樣的,可以綁定ip

-- 創(chuàng)建一個(gè)python應(yīng)用容器,并將容器內(nèi)部端口指定映射到主機(jī)端口,并綁定127.0.0.1IP  
[root@bogon docker]# docker run -d -p 127.00.1:5001:5000 training/webapp python app.py

如果要綁定udp端口,可以在端口后面加上/udp

[root@bogon docker]# docker run -d -p 127.00.1:5001:5000/udp training/webapp python app.py
docker容器互聯(lián)
-- 創(chuàng)建新的docker網(wǎng)絡(luò),其中-d參數(shù)指定docker網(wǎng)絡(luò)類型,可以是bridge、overlay
[root@bogon docker]# docker network create -d bridge test-net
-- 查看當(dāng)前docker網(wǎng)絡(luò)
[root@bogon docker]# docker network ls
-- 運(yùn)行一個(gè)容器,并使這個(gè)容器連接剛剛新建的網(wǎng)絡(luò)  
[root@bogon docker]# docker run -it --name test1 --network test-net ubuntu /bin/bash

打開(kāi)一個(gè)新的客戶端,再運(yùn)行一個(gè)容器,同樣連接這個(gè)網(wǎng)絡(luò)

-- 再運(yùn)行一個(gè)容器,并使這個(gè)容器連接剛剛新建的網(wǎng)絡(luò)  
[root@bogon docker]# docker run -it --name test2 --network test-net ubuntu /bin/bash
-- 分別在兩個(gè)容器安裝ping命令
root@6fa849899adb:/# apt-get update
root@6fa849899adb:/# apt install iputils-ping
root@540213266b2a:/# apt-get update
root@540213266b2a:/# apt install iputils-ping

在test1的容器上使用ping命令ping test2的容器



在test2的容器上使用ping命令ping test1的容器


配置DNS
[root@bogon docker]# docker run -it --rm host_ubuntu  --dns=114.114.114.114 --dns-search=test.com ubuntu

參數(shù)說(shuō)明:
-h HOSTNAME 或者 --hostname=HOSTNAME: 設(shè)定容器的主機(jī)名,它會(huì)被寫(xiě)到容器內(nèi)的 /etc/hostname 和 /etc/hosts。

--dns=IP_ADDRESS: 添加 DNS 服務(wù)器到容器的 /etc/resolv.conf 中,讓容器用這個(gè)服務(wù)器來(lái)解析所有不在 /etc/hosts 中的主機(jī)名。
--dns-search=DOMAIN: 設(shè)定容器的搜索域,當(dāng)設(shè)定搜索域?yàn)?.example.com 時(shí),在搜索一個(gè)名為 host 的主機(jī)時(shí),DNS 不僅搜索 host,還會(huì)搜索 host.example.com。

注意:如果在啟動(dòng)容器的時(shí)候沒(méi)有指定dns信息,那么容器會(huì)默認(rèn)使用主機(jī)上的/etc/resolv.conf的配置來(lái)配置DNS

4、倉(cāng)庫(kù)管理

docker倉(cāng)庫(kù)存放docker鏡像的倉(cāng)庫(kù),目前官方有一個(gè)公共的倉(cāng)庫(kù):Docker Hub,大部分需求鏡像都可以從這個(gè)鏡像庫(kù)上下載下來(lái),地址是:https://hub.docker.com
基本操作:

-- 登錄 
docker login   
-- 退出  
docker logout  
-- 查找鏡像如sshd  
docker search sshd
-- 拉取鏡像到本地  
docker pull sshd  
-- 推送鏡像到Docker Hub  
docker push username/respositiry:tag

四、Docker安裝CentOS

1、查看可用CentOS版本

訪問(wèn)CentOS鏡像庫(kù)地址:https://hub.docker.com/_/centos?tab=tags&page=1
查看可用標(biāo)簽,標(biāo)簽右邊可以直接復(fù)制命令

2、拉取指定版本
-- 拉取鏡像
[root@bogon docker]# docker pull centos:centos7
-- 查看是否拉取成功
[root@bogon docker]# docker images

之后啟動(dòng)容器即可

五、Docker安裝MySQL

1、查看可用MySQL版本

訪問(wèn)MySQL鏡像庫(kù)地址:https://hub.docker.com/_/mysql?tab=tags 查看可用標(biāo)簽

2、拉取指定版本
-- 拉取鏡像
[root@bogon docker]# docker pull mysql:latest
-- 查看是否拉取成功
[root@bogon docker]# docker images
-- 運(yùn)行容器,
[root@bogon docker]# docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

參數(shù)說(shuō)明:
-p 3306:3306:映射容器服務(wù)的3306端口到主機(jī)的3306端口,外部主機(jī)可以通過(guò)主機(jī)IP:3306端口訪問(wèn)數(shù)據(jù)庫(kù)
MYSQL_ROOT_PASSWORD=123456:設(shè)置MySQL中root用戶的密碼

-- 進(jìn)入容器  
docker exec -it efa46d7ea95c /bin/bash

進(jìn)入容器后可以mysql -uroot -p來(lái)登錄MySQL

六、Docker安裝Tomcat

tomcat的安裝方式跟上面的方式一致
1、搜索鏡像
2、拉取鏡像
3、啟動(dòng)容器
其它的相關(guān)服務(wù)安裝方式也大致相同,這里就不多做研究

七、Docker GUI管理

這里使用Portainer來(lái)作為容器的GUI管理方案。
官方地址:https://portainer.io/install.html
安裝命令:

# docker volume create portainer_data
# docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

另一種安裝命令:

# docker search portainer  
# docker pull portainer/portainer 
# docker run -d -p 9000:9000 -v /run/docker.sock:/run/docker.sock -v portainer_data:/data portainer/portainer

使用:
訪問(wèn)IP:9000 即可進(jìn)入容器管理頁(yè)面

八、參考并致謝

https://www.runoob.com/docker/centos-docker-install.html
https://www.cnblogs.com/lylsr/p/11173012.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容