1. 安裝 yum install -y yum-utils device-mapper-persistent-data lvm2 epel-release yum-config-manager --add-repo https://download./linux/centos/docker-ce.repo # 查看可安裝的docker版本 yum list docker-ce --showduplicates | sort -r yum install docker-ce systemctl start docker docker version 2. 配置鏡像加速源 文件沒(méi)有就新建一個(gè)即可 [root@configman docker]# cat /etc/docker/daemon.json { "registry-mirrors": ["https://pee6w651.mirror."] } 3. 常用命令 查看鏡像 docker images 查找鏡像 [root@configman ~]# docker search redis 獲取鏡像 docker pull nginx docker pull tomcat 查看運(yùn)行的鏡像 docker ps -a Docker 允許你在容器內(nèi)運(yùn)行應(yīng)用程序, 使用 docker run 命令來(lái)在容器內(nèi)運(yùn)行一個(gè)應(yīng)用程序 docker run centos:6.9 /bin/echo "Hello world" 我們通過(guò)docker的兩個(gè)參數(shù) -i -t,,讓docker運(yùn)行的容器實(shí)現(xiàn)"對(duì)話"的能力 docker run -i -t centos:6.9 /bin/bash 使用以下命令創(chuàng)建一個(gè)以進(jìn)程方式運(yùn)行的容器 [root@configman docker]# docker run -d centos:6.9 /bin/sh -c "while true; do echo hello world; sleep 1; done" 在輸出中,我們沒(méi)有看到期望的"hello world",,而是一串長(zhǎng)字符 3cb262ebb07842a3b3801b145a12c9fb8d967115a7ff037b3f90ba13e9ad6e6d 這個(gè)長(zhǎng)字符串叫做容器ID,對(duì)每個(gè)容器來(lái)說(shuō)都是唯一的,,我們可以通過(guò)容器ID來(lái)查看對(duì)應(yīng)的容器發(fā)生了什么,。 首先,我們需要確認(rèn)容器有在運(yùn)行,可以通過(guò) docker ps 來(lái)查看 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3cb262ebb078 centos:6.9 "/bin/sh -c 'while t…" 11 minutes ago Up 11 minutes optimistic_bardeen 930bd1904df8 centos:6.9 "/bin/bash" 19 minutes ago Exited (1) 18 minutes ago boring_elion 7c5ea0159ed9 nginx "nginx -g 'daemon of…" 25 minutes ago Exited (0) 23 minutes ago adoring_euclid f1e2f087addc hello-world "/hello" 26 minutes ago Exited (0) 26 minutes ago adoring_chatterjee 查看日志 docker logs 3cb262ebb078 docker logs optimistic_bardeen 啟停止容器 docker start/stop 3cb262ebb078 docker start/stop optimistic_bardeen 刪除容器 docker rm 3cb262ebb078 docker rm optimistic_bardeen 4. 客戶端使用 docker 客戶端非常簡(jiǎn)單 ,我們可以直接輸入 docker 命令來(lái)查看到 Docker 客戶端的所有命令選項(xiàng),。 運(yùn)行一個(gè)web應(yīng)用 前面我們運(yùn)行的容器并沒(méi)有一些什么特別的用處,。 接下來(lái)讓我們嘗試使用 docker 構(gòu)建一個(gè) web 應(yīng)用程序。 我們將在docker容器中運(yùn)行一個(gè) Python Flask 應(yīng)用來(lái)運(yùn)行一個(gè)web應(yīng)用,。 docker pull training/webapp # 載入鏡像 docker run -d -P training/webapp python app.py
[root@configman ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 794fa8091343 training/webapp "python app.py" 9 minutes ago Up 9 minutes 0.0.0.0:32768->5000/tcp clever_ritchie 通過(guò)IP:32768 即可訪問(wèn) 我們也可以通過(guò) -p 參數(shù)來(lái)設(shè)置不一樣的端口: runoob@runoob:~$ docker run -d -p 5000:5000 training/webapp python app.py [root@configman ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9904e9afd6c9 training/webapp "python app.py" 3 minutes ago Up 3 minutes 0.0.0.0:5000->5000/tcp xenodochial_ptolemy 794fa8091343 training/webapp "python app.py" 16 minutes ago Up 16 minutes 0.0.0.0:32768->5000/tcp clever_ritchie 網(wǎng)絡(luò)端口的快捷方式 通過(guò) docker ps 命令可以查看到容器的端口映射,,docker 還提供了另一個(gè)快捷方式 docker port,,使用 docker port 可以查看指定 (ID 或者名字)容器的某個(gè)確定端口映射到宿主機(jī)的端口號(hào)。 docker port 9904e9afd6c9 5000/tcp -> 0.0.0.0:5000 查看 WEB 應(yīng)用程序日志 docker logs [ID或者名字] 可以查看容器內(nèi)部的標(biāo)準(zhǔn)輸出,。 runoob@runoob:~$ docker logs -f 9904e9afd6c9 -f: 讓 docker logs 像使用 tail -f 一樣來(lái)輸出容器內(nèi)部的標(biāo)準(zhǔn)輸出。 從上面,,我們可以看到應(yīng)用程序使用的是 5000 端口并且能夠查看到應(yīng)用程序的訪問(wèn)日志,。 查看WEB應(yīng)用程序容器的進(jìn)程 我們還可以使用 docker top 來(lái)查看容器內(nèi)部運(yùn)行的進(jìn)程 [root@configman ~]# docker top 9904e9afd6c9 UID PID PPID C STIME TTY TIME CMD root 62983 62966 0 16:37 ? 00:00:00 python app.py 檢查 WEB 應(yīng)用程序 使用 docker inspect 來(lái)查看 Docker 的底層信息。它會(huì)返回一個(gè) JSON 文件記錄著 Docker 容器的配置和狀態(tài)信息,。 [root@configman ~]# docker inspect 9904e9afd6c9 [ { "Id": "9904e9afd6c907d46ea07f95bc49dd77fd3c848b5fd0c9c7a023498d5a52a5a6", "Created": "2019-03-04T08:37:21.597591699Z", "Path": "python", "Args": [ "app.py" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, .......................................................................................................................... 下載完成后,,我們就可以使用這個(gè)鏡像了。 runoob@runoob:~$ docker run -d httpd 創(chuàng)建鏡像 當(dāng)我們從docker鏡像倉(cāng)庫(kù)中下載的鏡像不能滿足我們的需求時(shí),,我們可以通過(guò)以下兩種方式對(duì)鏡像進(jìn)行更改,。
更新鏡像 更新鏡像之前,,我們需要使用鏡像來(lái)創(chuàng)建一個(gè)容器,。 docker run -t -i centos:6.9 /bin/bashroot@fdd312d511f9:/# 在運(yùn)行的容器內(nèi)使用yum update 命令進(jìn)行更新。 在完成操作之后,,輸入 exit命令來(lái)退出這個(gè)容器,。 此時(shí)ID為fdd312d511f9的容器,是按我們的需求更改的容器,。我們可以通過(guò)命令 docker commit來(lái)提交容器副本,。 docker commit -m="has update" -a="suwei" fdd312d511f9 suwei/centos6.9:v2 各個(gè)參數(shù)說(shuō)明:
[root@configman ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE suwei/centos6.9 v2 368582acb23a 5 seconds ago 440MB nginx latest 8c9ca4d17702 5 days ago 109MB httpd latest d3a13ec4a0f1 2 weeks ago 132MB 運(yùn)行新的鏡像 docker run -t -i suwei/centos6.9:v2 /bin/bash 構(gòu)建鏡像 我們使用命令 docker build , 從零開始來(lái)創(chuàng)建一個(gè)新的鏡像,。為此,,我們需要?jiǎng)?chuàng)建一個(gè) Dockerfile 文件,其中包含一組指令來(lái)告訴 Docker 如何構(gòu)建我們的鏡像,。 [root@configman ~]# cat Dockerfile FROM centos:6.7 MAINTAINER Fisher "[email protected]" RUN /bin/echo 'root:111111' |chpasswd RUN useradd test RUN /bin/echo 'test:test' |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è)指令的前綴都必須是大寫的。 第一條FROM,,指定使用哪個(gè)鏡像源 RUN 指令告訴docker 在鏡像內(nèi)執(zhí)行命令,,安裝了什么。。,。 然后,,我們使用 Dockerfile 文件,通過(guò) docker build 命令來(lái)構(gòu)建一個(gè)鏡像,。 docker build -t suwei/centos:6.7 . 參數(shù)說(shuō)明:
使用docker images 查看創(chuàng)建的鏡像已經(jīng)在列表中存在,鏡像ID為226028b77315 [root@configman ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE suwei/centos 6.7 226028b77315 43 seconds ago 191MB suwei/centos6.9 v2 368582acb23a 32 minutes ago 440MB 我們可以使用新的鏡像來(lái)創(chuàng)建容器 Docker 容器連接 前面我們實(shí)現(xiàn)了通過(guò)網(wǎng)絡(luò)端口來(lái)訪問(wèn)運(yùn)行在 docker 容器內(nèi)的服務(wù)。下面我們來(lái)實(shí)現(xiàn)通過(guò)端口連接到一個(gè) docker 容器 我們也可以使用 -p 標(biāo)識(shí)來(lái)指定容器端口綁定到主機(jī)端口,。 兩種方式的區(qū)別是:
docker run -d -p 5000:5000 training/webapp python app.py 另外,,我們可以指定容器綁定的網(wǎng)絡(luò)地址,,比如綁定 127.0.0.1。 docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py 如果要綁定 UDP 端口,,可以在端口后面加上 /udp docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py 鏡像操作 刪除 docker rmi 鏡像名稱/IMAGE ID docker rmi 7d0d6c2cec45 導(dǎo)出 docker save -o 備份名稱.tar 鏡像名稱 例如: [root@configman ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE my/nginx v888 7d0d6c2cec45 23 hours ago 108MB mynginx latest 1fb19eb746fe 23 hours ago 108MB 導(dǎo)入 docker save -o mynginx.tar mynginx 恢復(fù)就很簡(jiǎn)單了 docker load -i mynginx.tar 可以恢復(fù)到其它服務(wù)器或系統(tǒng) 有個(gè)問(wèn)題 如果遇到鏡像名稱一致的該如何制定備份鏡像呢 例如 [root@test01 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hehe 30821 275f450c200c 4 hours ago 265MB test 25389 bfcdce890dcd 23 hours ago 254MB test 26826 ec342d163e2b 25 hours ago 254MB test 14879 228f6e432d8c 28 hours ago 254MB 兩種方式 docker save -o test.tar test:25389 或者 docker save -o test.tar bfcdce890dcd |
|
來(lái)自: 蘇魚魚的IT運(yùn)維 > 《docker》