Docker安装与镜像,容器命令管理
docker和容器的關(guān)系
-Docker是完整的一套容器管理系統(tǒng)
-Docker提供了一組命令, 讓用戶更加方便直接地使用容器技 術(shù),而不需要過多關(guān)心底層內(nèi)核技術(shù)
一.Docker的安裝
1.配置環(huán)境變量
-需要64位操作系統(tǒng)
-至少RHEL6.5以上的版本,強(qiáng)烈推薦RHEL7(主要是因為內(nèi)核限制,3.1以上即可)
-關(guān)閉防火墻(不是必須的)
2.docker的安裝
1)安裝前檢查
# 檢查內(nèi)核與linux版本 ~]# hostnamectlStatic hostname: VM-0-51-centosIcon name: computer-vmChassis: vmMachine ID: 35b12e3f2e994abebdafc2f42fe653dfBoot ID: 816a7c7dd74a48b69fc74b0330106201Virtualization: kvmOperating System: CentOS Linux 7 (Core)CPE OS Name: cpe:/o:centos:centos:7Kernel: Linux 3.10.0-1127.19.1.el7.x86_64Architecture: x86-64 ? # 開啟路由轉(zhuǎn)發(fā) ~]# vim /etc/sysctl.conf net.ipv4.ip_forward = 1 ~]# sysctl -p ? ## 運(yùn)用阿里的yum源安裝 # 下載yum配置 ~]#wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 刷新并安裝 ~]# yum clean all && yum repolist && yum makecache注:因為容器里有一塊網(wǎng)卡docker0,如果eth0不設(shè)置路由轉(zhuǎn)發(fā)的話,他們之間也就無法轉(zhuǎn)發(fā)通信
2)安裝Docker
# 查看最新版本并安裝 ~]# yum list docker-ce --showduplicates | sort -r ~]# yum install -y docker-ce ? # 安裝成功后,使用docker version命令查看是否安裝成功,安裝成功后------如下 ~]# docker version Client:Version: ? ? ?17.05.0-ceAPI version: ?1.29Go version: ? go1.7.5Git commit: ? 89658beBuilt: ? ? ? Thu May ?4 22:06:25 2017OS/Arch: ? ? linux/amd64 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?或則下載安裝包安裝
安裝包官方地址:Index of linux/static/stable/x86_64/
## 可以先下載到本地,然后通過ftp工具上傳到服務(wù)器上,或者在服務(wù)器上使用命令下載 ~]# wget https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz# 解壓 ~]# tar -zxvf docker-18.06.3-ce.tgz# 將解壓出來的docker文件復(fù)制到?/usr/bin/ 目錄下 ~]# cp docker/* /usr/bin/# 在/etc/systemd/system/目錄下新增docker.service文件,內(nèi)容如下,這樣可以將docker注冊為service服務(wù) ~]# vim /etc/systemd/system/docker.service [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target[Service] Type=notify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not support the cgroup feature set required # for containers run by docker ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=127.0.0.1 ExecReload=/bin/kill -s HUP $MAINPID # Having non-zero Limit*s causes performance problems due to accounting overhead # in the kernel. We recommend using cgroups to do container-local accounting. LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity # Uncomment TasksMax if your systemd version supports it. # Only systemd 226 and above support this version. #TasksMax=infinity TimeoutStartSec=0 # set delegate yes so that systemd does not reset the cgroups of docker containers Delegate=yes # kill only the docker process, not all processes in the cgroup KillMode=process # restart the docker process if it exits prematurely Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s[Install] WantedBy=multi-user.target# 此處的--insecure-registry=127.0.0.1(此處改成你私服ip)設(shè)置是針對有搭建了自己私服Harbor時允許docker進(jìn)行不安全的訪問,否則訪問將會被拒絕。## 啟動docker # 給docker.service文件添加執(zhí)行權(quán)限 ~]# chmod +x /etc/systemd/system/docker.service # 重新加載配置文件(每次有修改docker.service文件時都要重新加載下) ~]# systemctl daemon-reload ?3)啟動容器
~]# systemctl start docker.service ? # 驗證安裝是否成功(有client和service兩部分表示docker安裝啟動都成功了) ~]# docker version Client: Docker Engine - CommunityVersion: ? ? ? ? ? 18.09.9API version: ? ? ? 1.39Go version: ? ? ? go1.11.13Git commit: ? ? ? 039a7df9baBuilt: ? ? ? ? ? ? Wed Sep ?4 16:50:02 2019OS/Arch: ? ? ? ? ? linux/amd64Experimental: ? ? ?false ? Server: Docker Engine - CommunityEngine:Version: ? ? ? ? ?18.09.9API version: ? ? ?1.39 (minimum version 1.12)Go version: ? ? ? go1.11.13Git commit: ? ? ? 039a7df9baBuilt: ? ? ? ? ? Wed Sep ?4 16:55:50 2019OS/Arch: ? ? ? ? linux/amd64Experimental: ? ? false ? # 設(shè)置開機(jī)自啟動 ~]# systemctl enable docker二.鏡像與容器
Docker的三大核心概念:鏡像、容器、倉庫
1.鏡像
1)鏡像的概述
類似虛擬機(jī)的鏡像、用俗話說就是安裝文件。
\- 鏡像是啟動容器的核心- 在Docker中容器是基于鏡像啟動的
- 鏡像采用分層設(shè)計
-使用COW技術(shù)(寫實復(fù)制,最多只能是255層)
寫實復(fù)制:
Copy-On-Write簡稱COW,是一種用于程序設(shè)計中的優(yōu)化策略。其基本思路是,從一開始大家都在共享同一個內(nèi)容,當(dāng)某個人想要修改這個內(nèi)容的時候,才會真正把內(nèi)容Copy出去形成一個新的內(nèi)容然后再改,這是一種延時懶惰策略
什么是CopyOnWrite容器:
CopyOnWrite容器即寫時復(fù)制的容器。通俗的理解是當(dāng)我們往一個容器添加元素的時候,不直接往當(dāng)前容器添加,而是先將當(dāng)前容器進(jìn)行Copy,復(fù)制出一個新的容器,然后新的容器里添加元素,添加完元素之后,再將原容器的引用指向新的容器。這樣做的好處是我們可以對CopyOnWrite容器進(jìn)行并發(fā)的讀,而不需要加鎖,因為當(dāng)前容器不會添加任何元素。所以CopyOnWrite容器也是一種讀寫分離的思想,讀和寫不同的容器
注:所以說容器是基于鏡像的讀寫層創(chuàng)建的
2)獲取鏡像
-官方倉庫下載或自己制作
-官方倉庫
Docker Hub
# 如果下不了國外的鏡像也可以設(shè)置國內(nèi)的(daemon.json文件需自己創(chuàng)建) ~]# vim /etc/docker/daemon.json {"registry-mirrors": ["https://registry.docker-cn.com", "http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"]} ~]# systemctl restart docker.service # 重啟生效3)鏡像的管理命令
| docker images | 查看鏡像 | |
| docker search 關(guān)鍵字 | 查找鏡像 | 默認(rèn)查看國外的 |
| docker pull 鏡像名稱 | 下載鏡像 | |
| docker push 鏡像名稱:鏡像標(biāo)簽 倉庫地址 | ||
| docker save 鏡像名稱:鏡像標(biāo)簽 -o 文件名(tar 格式) | 備份鏡像(導(dǎo)出鏡像) | |
| docker load -i 備份文件名稱(.tar) | 恢復(fù)鏡像(導(dǎo)入鏡像) | |
| docker inspect 鏡像名稱:鏡像標(biāo)簽 | 查看鏡像詳細(xì)信息 | |
| docker history 鏡像名稱:鏡像標(biāo)簽 | 查看鏡像的層(制作歷史) | |
| docker tag 鏡像名稱:鏡像標(biāo)簽 (舊的) 鏡像名稱:鏡像標(biāo)簽(新得) | 給鏡像添加新的名稱和標(biāo)簽 | |
| docker rmi 鏡像名稱:鏡像標(biāo)簽 | 刪除鏡像 | 要先停止容器 |
4)示例
# 查找鏡像(默認(rèn)從官網(wǎng)找) ~]# docker search centos NAME ? ? ? DESCRIPTION ? ? ? ? ? ? ? ? STARS ? ? ? ? ? ? ? OFFICIAL ? ? ? ? ? AUTOMATED centos ? The official build of CentOS. ? 6963 ? ? ? ? ? ? ? [OK] ? ? ? ? ? ? ? ? ansible/centos7-ansible Ansible on Centos7 ? ? ? ? ?135 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [OK] consol/centos-xfce-vnc ? ? ? ? ? Centos container with "headless" VNC session… ? 132 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [OK] # 下載鏡像 ~]# docker pull centos ..... Status: Downloaded newer image for centos:latest ? # 上傳鏡像 ~]# docker push centos:latest 倉庫地址| 鏡像的名字 | 鏡像的簡單描述 | 鏡像被點贊的次數(shù) | 代表是否是由官方提供的 |
| 鏡像名稱 | 鏡像標(biāo)簽 | 鏡像ID | 鏡像的創(chuàng)建時間 | 鏡像的大小 |
5)鏡像的名稱和標(biāo)簽的概述
-
每一個鏡像都對應(yīng)唯一的鏡像 id
-
鏡像名稱(文件名稱)+標(biāo)簽 (路徑) ==唯一
-
每一個鏡像都有標(biāo)簽,如果沒寫就是默認(rèn)標(biāo)簽 latest
-
我們在調(diào)用鏡像的時候,如果沒有指定標(biāo)簽也是 latest
2.容器
類似一個輕量級的沙箱,容器是從鏡像創(chuàng)建應(yīng)用運(yùn)行實例,
可以將其啟動、開始、停止、刪除、而這些容器都是相互隔離、互不可見的。
1)容器的管理命令
| docker run -it(d) 鏡像名稱:標(biāo)簽 啟動命令 | 創(chuàng)建啟動并進(jìn)入容器,后臺容器使用參數(shù)d |
| docker ps | 查看容器-a所有容器,包含未啟動的,-q只顯示id |
| docker rm 容器ID | -f強(qiáng)制刪除,支持命令重入 |
| docker start|stop|restart 容器id | 啟動、停止、重啟容器 |
| docker cp 本機(jī)文件路徑 容器id:容器內(nèi)路徑 | 把本機(jī)文件拷貝到容器(上傳) |
| docker cp 容器id:容器內(nèi)路徑 本機(jī)文件路徑 | 從容器內(nèi)拷貝文件到宿主機(jī)(下載) |
| docker inspect 容器ID | 查看容器詳細(xì)信息 |
| docker attach 容器id | 進(jìn)入容器默認(rèn)進(jìn)程,推出后關(guān)閉默認(rèn)進(jìn)程(變相關(guān)閉容器) |
| docker attach 容器id{ctr+p,ctl+q} | 進(jìn)入容器以后,退出容器而不關(guān)閉的方法 |
| docker exec -it 容器id 啟動命令 | 進(jìn)入容器新的進(jìn)程,推出后容器不會關(guān)閉 |
2)docker run命令參數(shù)
docker run 命令
-docker run -參數(shù) 鏡像名稱:鏡像標(biāo)簽 啟動命令
查看 run的參數(shù)
-docker help run
run = 創(chuàng)建+啟動+進(jìn)入
-
參數(shù) -i,交互式
- 參數(shù) -t,終端
- 參數(shù) -d,后臺運(yùn)行
- 參數(shù) --name 容器名字
示例
# 啟動centos 容器,并進(jìn)入容器 ~]# docker run -it centos:latest /bin/bash ~]# exit #退出后容器自動關(guān)閉(使用ctrl+p,Ctrl+q # 使用快捷鍵退出,保證容器不關(guān)閉) ## 啟動命令 # 但不知道啟動命令時則不寫(不寫則用默認(rèn)的) ~]# docker run -it centos # 當(dāng)寫了啟動命令時就不會執(zhí)行默認(rèn)的, # 默認(rèn)的用處比如應(yīng)用程序容器nginx,apache等 ~]# docker run -it nginx:latest #此時是不可以交互的,直接退出會關(guān)閉容器(可以使用快捷鍵退出,放入后臺),但此時多次一舉不如直接放入后臺 ~]# docker run -itd nginx:latest ~]# ps -ef ..... root 25795 12099 0 16:42 ? 00:00:00 containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/753ff4121bdac92221be3)示例
## 查看容器 # 查看啟動的容器 ~]# docker ps# 查看所有容器,包含未啟動的 ~]# docker ps -a# 只查看啟動容器的id ~]# docker ps -q # 查看所有容器的id ~]# docker ps -aq ## 刪除容器 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 753ff4121bda centos "/bin/bash" 45 minutes ago Up 45 minutes vigilant_payne # 正常刪除 ~]# docker rm 753ff4121bda# 當(dāng)容器還是啟動時則不能正常刪除,需停止容器再刪除 ~]# docker stop 753ff4121bda ~]# docker rm 753ff4121bda# 強(qiáng)制刪除(會損壞數(shù)據(jù),如運(yùn)行時的數(shù)據(jù)庫,會損壞表庫等) ~]# docker rm -f 753ff4121bda# 刪除所有容器 ~]# docker rm $(docker stop $(docker ps -aq)) ## 啟動、停止、重啟容器 # 格式 docker start|stop|restart 容器ID|容器名字 ~]# docker start 753ff4121bda|vigilant_payne ~]# docker stop 753ff4121bda|vigilant_payne ~]# docker restart 753ff4121bda|vigilant_payne ## 查看容器詳細(xì)信息 # 格式 ~]# docker inspect 容器ID|容器名字 ~]# docker inspect vigilant_payne [ ........ "NetworkSettings": {"Bridge": "","SandboxID": "4640bfda49bca0c2fe676cd805150bed1521a8da84f0968f7184ecb9864f1c19","HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"Ports": {},"SandboxKey": "/var/run/docker/netns/4640bfda49bc","SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"EndpointID": "cf4686443b5ccfe73609cdcb6ff3381f944fe84bf9bb96cb02aedbec11881381","Gateway": "172.18.0.1","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress": "172.18.0.5","IPPrefixLen": 16,"IPv6Gateway": "","MacAddress": "02:42:ac:12:00:05","Networks": {"bridge": {"IPAMConfig": null,"Links": null,"Aliases": null,"NetworkID": "a98aa42f05e6d61e49409a1411c93dc65db871eec3c0518acab20d42e938a858","EndpointID": "cf4686443b5ccfe73609cdcb6ff3381f944fe84bf9bb96cb02aedbec11881381","Gateway": "172.18.0.1","IPAddress": "172.18.0.5","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:12:00:05","DriverOpts": null}}}} ] # 注:有用的信息如上,網(wǎng)絡(luò)配置只有啟動容器才有 ## 從容器內(nèi)拷貝首頁文件到宿主機(jī),修改后拷貝回容器內(nèi)# 下載格式 ~]# docker cp 容器ID:容器路徑 本機(jī)文件路徑 ~]# docker cp 9cae0af944d8:/usr/share/nginx/html/index.html ./index.html ~]# vim index.html Hello Tedu Hello Tedu Hello Tedu# 上傳格式 ~]# docker cp 本機(jī)文件路徑 容器id:容器內(nèi)路徑 ~]# docker cp ./index.html 9cae0af944d8:/usr/share/nginx/html/index.html # 測試 剛剛的詳細(xì)信息可查看IP地址 ~]# curl http://172.18.0.5/ ## 啟動容器 # 使用 attach啟動(可以不帶啟動命令) ~]# docker attach 753ff4121bda #注:推出后容器會關(guān)閉(解決翻案快捷鍵ctl+p,ctl+q),只能進(jìn)入有交互式的容器,入nginx的應(yīng)用服務(wù)則不會動 /]# ctl+p,ctl+q >> read escape sequence# 使用exec(必須帶啟動命令) ~]# docker exec -it 753ff4121bda /bin/bash # 退出后不會關(guān)閉容器,可以進(jìn)入任意容器#注:attach連接的是容器的啟動進(jìn)程(主要用于排錯)而exec進(jìn)入的則是新進(jìn)程(主要用于維護(hù)管理) ~]# docker attach 753ff4121bda # 此時啥也沒有~]# curl http://172.18.0.5/haha.html curl: (7) Failed connect to 172.18.0.5:80; Connection refused # 此時容器內(nèi)就會報錯三.容器的進(jìn)程管理
1.上帝進(jìn)程的概述
簡單的說就是系統(tǒng)創(chuàng)建之初產(chǎn)生的第一個進(jìn)程
特點:
-沒有父進(jìn)程
-PID==1
-所有進(jìn)程都是他的子進(jìn)程,孫子進(jìn)程,曾孫,玄孫進(jìn)程
-上帝進(jìn)程死亡系統(tǒng)實例也就不存在
2.上帝進(jìn)程與容器的關(guān)系
容器的啟動進(jìn)程就是上帝進(jìn)程,他的pid==1
上帝進(jìn)程退出==容器關(guān)閉
如何保證容器不關(guān)閉?
-容器的啟動進(jìn)程不能被關(guān)閉
-容器的啟動進(jìn)程必須在前臺運(yùn)行
前臺服務(wù)與后臺服務(wù)
容器的啟動進(jìn)程在后臺運(yùn)行不等于容器在后臺運(yùn)行
容器的啟動服務(wù)
-前臺服務(wù)(-it)
????????一般能與用戶交互的程序,比如/bin/bash /bin/sh
-后臺服務(wù)(-itd)
????????一般是一個程序的服務(wù),比如apache、nginx、redis等
示例
# 查看該容器的啟動進(jìn)程 /]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 09:35 pts/0 00:00:00 /bin/bash # 查看當(dāng)前進(jìn)程 /]# echo $$ 1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 753ff4121bda centos "/bin/bash" 3 hours ago Exited (0) 2 seconds ago vigilant_payne3.僵尸進(jìn)程與孤兒進(jìn)程的基本概念
我們知道在unix/linux中,正常情況下,子進(jìn)程是通過父進(jìn)程創(chuàng)建的,子進(jìn)程在創(chuàng)建新的進(jìn)程。子進(jìn)程的結(jié)束和父進(jìn)程的運(yùn)行是一個異步過程,即父進(jìn)程永遠(yuǎn)無法預(yù)測子進(jìn)程 到底什么時候結(jié)束。 當(dāng)一個 進(jìn)程完成它的工作終止之后,它的父進(jìn)程需要調(diào)用wait()或者waitpid()系統(tǒng)調(diào)用取得子進(jìn)程的終止?fàn)顟B(tài)。
孤兒進(jìn)程:
一個父進(jìn)程退出,而它的一個或多個子進(jìn)程還在運(yùn)行,那么那些子進(jìn)程將成為孤兒進(jìn)程。孤兒進(jìn)程將被init進(jìn)程(進(jìn)程號為1)所收養(yǎng),并由init進(jìn)程對它們完成狀態(tài)收集工作。
僵尸進(jìn)程:
一個進(jìn)程使用fork創(chuàng)建子進(jìn)程,如果子進(jìn)程退出,而父進(jìn)程并沒有調(diào)用wait或waitpid獲取子進(jìn)程的狀態(tài)信息,那么子進(jìn)程的進(jìn)程描述符仍然保存在系統(tǒng)中。這種進(jìn)程稱之為僵死進(jìn)程。
問題及危害
unix提供了一種機(jī)制可以保證只要父進(jìn)程想知道子進(jìn)程結(jié)束時的狀態(tài)信息, 就可以得到。這種機(jī)制就是: 在每個進(jìn)程退出的時候,內(nèi)核釋放該進(jìn)程所有的資源,包括打開的文件,占用的內(nèi)存等。 但是仍然為其保留一定的信息(包括進(jìn)程號the process ID,退出狀態(tài)the termination status of the process,運(yùn)行時間the amount of CPU time taken by the process等)。直到父進(jìn)程通過wait / waitpid來取時才釋放。 但這樣就導(dǎo)致了問題,如果進(jìn)程不調(diào)用wait / waitpid的話, 那么保留的那段信息就不會釋放,其進(jìn)程號就會一直被占用,但是系統(tǒng)所能使用的進(jìn)程號是有限的,如果大量的產(chǎn)生僵死進(jìn)程,將因為沒有可用的進(jìn)程號而導(dǎo)致系統(tǒng)不能產(chǎn)生新的進(jìn)程. 此即為僵尸進(jìn)程的危害,應(yīng)當(dāng)避免。
孤兒進(jìn)程是沒有父進(jìn)程的進(jìn)程,孤兒進(jìn)程這個重任就落到了init進(jìn)程身上,init進(jìn)程就好像是一個民政局,專門負(fù)責(zé)處理孤兒進(jìn)程的善后工作。每當(dāng)出現(xiàn)一個孤兒進(jìn)程的時候,內(nèi)核就把孤 兒進(jìn)程的父進(jìn)程設(shè)置為init,而init進(jìn)程會循環(huán)地wait()它的已經(jīng)退出的子進(jìn)程。這樣,當(dāng)一個孤兒進(jìn)程凄涼地結(jié)束了其生命周期的時候,init進(jìn)程就會代表黨和政府出面處理它的一切善后工作。因此孤兒進(jìn)程并不會有什么危害。
任何一個子進(jìn)程(init除外)在exit()之后,并非馬上就消失掉,而是留下一個稱為僵尸進(jìn)程(Zombie)的數(shù)據(jù)結(jié)構(gòu),等待父進(jìn)程處理。這是每個 子進(jìn)程在結(jié)束時都要經(jīng)過的階段。如果子進(jìn)程在exit()之后,父進(jìn)程沒有來得及處理,這時用ps命令就能看到子進(jìn)程的狀態(tài)是“Z”。如果父進(jìn)程能及時 處理,可能用ps命令就來不及看到子進(jìn)程的僵尸狀態(tài),但這并不等于子進(jìn)程不經(jīng)過僵尸狀態(tài)。 如果父進(jìn)程在子進(jìn)程結(jié)束之前退出,則子進(jìn)程將由init接管。init將會以父進(jìn)程的身份對僵尸狀態(tài)的子進(jìn)程進(jìn)行處理。
僵尸進(jìn)程危害場景:
例如有個進(jìn)程,它定期的產(chǎn) 生一個子進(jìn)程,這個子進(jìn)程需要做的事情很少,做完它該做的事情之后就退出了,因此這個子進(jìn)程的生命周期很短,但是,父進(jìn)程只管生成新的子進(jìn)程,至于子進(jìn)程 退出之后的事情,則一概不聞不問,這樣,系統(tǒng)運(yùn)行上一段時間之后,系統(tǒng)中就會存在很多的僵死進(jìn)程,倘若用ps命令查看的話,就會看到很多狀態(tài)為Z的進(jìn)程。 嚴(yán)格地來說,僵死進(jìn)程并不是問題的根源,罪魁禍?zhǔn)资钱a(chǎn)生出大量僵死進(jìn)程的那個父進(jìn)程。因此,當(dāng)我們尋求如何消滅系統(tǒng)中大量的僵死進(jìn)程時,答案就是把產(chǎn)生大 量僵死進(jìn)程的那個元兇槍斃掉(也就是通過kill發(fā)送SIGTERM或者SIGKILL信號啦)。槍斃了元兇進(jìn)程之后,它產(chǎn)生的僵死進(jìn)程就變成了孤兒進(jìn) 程,這些孤兒進(jìn)程會被init進(jìn)程接管,init進(jìn)程會wait()這些孤兒進(jìn)程,釋放它們占用的系統(tǒng)進(jìn)程表中的資源,這樣,這些已經(jīng)僵死的孤兒進(jìn)程 就能瞑目而去了。
4.服務(wù)在前臺運(yùn)行實驗
1)容器內(nèi)安裝apache服務(wù)
# 刪除所有容器(防止影響測試) ~]# docker rm -f $(docker ps -aq) # 啟動一個容器 ~]# docker run -it --name myapache centos:latest # 搭建yum倉庫,由于容器是與宿主機(jī)共享資源的,直接可以用宿主機(jī)的配置 /]# cd /etc/yum.repos.d/ && rm -rf *.repo # --------------不要退出這個終端,在另一個終端拷貝 yum 配置文件到容器-------------------- ~]# cp /etc/yum.repos.d/CentOS-Base.repo myapache:/etc/yum.repos.d/ #------------------------回到創(chuàng)建容器的終端繼續(xù)執(zhí)行命令--------------------- # 安裝軟件 /]# yum install -y net-tools httpd # 寫一個默認(rèn)網(wǎng)頁 /]# echo Hello world >/var/www/html/index.html## 由于容器內(nèi)么有systemd進(jìn)程所以只能用手動啟動啟動 /]# ps -ef #可以看出沒有systemd進(jìn)程 UID PID PPID C STIME TTY TIME CMD root 1 0 0 09:35 pts/0 00:00:00 /bin/bash root 31 1 0 11:11 pts/0 00:00:00 ps -ef # 查看服務(wù)的啟動參數(shù) ~]# cat /usr/lib/systemd/system/httpd.service ..... ExecStart=/usr/sbin/httpd -D $OPTIONS -DFOREGROUND ....... # 可以發(fā)現(xiàn)有一個環(huán)境變量,此時查看 ~]# cat /etc/sysconfig/httpd ...... #OPTIONS= .... LANG=C .... # 配置環(huán)境變量 /]# export LANG=C # 查看網(wǎng)卡ip /]# ifconfig ..... ...172.17.0.2... ..... # 手動啟動 /]# /usr/sbin/httpd -DFOREGROUND # 此時會發(fā)現(xiàn)會占用此終端(ctl+p,ctl+q) # 訪問測試 ~]# curl http://172.17.0.2/ Hello world總結(jié)
管理鏡像使用 名稱:標(biāo)簽
管理容器使用 **容器ID
總結(jié)
以上是生活随笔為你收集整理的Docker安装与镜像,容器命令管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 公有云 --- 华为云的基本运用
- 下一篇: Docker进阶(制作镜像,共享卷,网络