什么是容器?
容器就是在隔離的環境運行的一個進程,如果進程停止,容器就會銷毀。隔離的環境擁有自己的系統文件,ip地址,主機名等,越來越多的公司在用容器,主要是容器更省成本。
#容器的安裝
# rm -fr /etc/yum.repos.d/local.repo
# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
# sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
# yum install docker-ce -y
# systemctl start docker.service
# systemctl enable docker.service
[root@docker01 ~]# docker version
Client: Docker Engine - Community
Version: 19.03.11
API version: 1.40
Go version: go1.13.10
Git commit: 42e35e61f3
Built: Mon Jun 1 09:13:48 2020
OS/Arch: linux/amd64
Experimental: false
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
docker主要有:鏡像、容器、倉庫、網絡、存儲、鏡像
#鏡像(把一堆的系統文件打成一個壓縮包),每啟動一個docker必須要一個鏡像,倉庫存儲鏡像,docker要運行必須依賴網絡,然后必須進行監控。
docker 的主要目標是構建、運輸、處處運行。
#安裝nginx
[root@docker01 ~]# docker run -d -p 80:80 nginx
#測試安裝
[root@docker01 ~]# curl -I 10.0.0.71:80
HTTP/1.1 200 OK
Server: nginx/1.19.0
Date: Tue, 09 Jun 2020 10:14:53 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 26 May 2020 15:00:20 GMT
Connection: keep-alive
ETag: "5ecd2f04-264"
Accept-Ranges: bytes
docker基本命令
#搜索鏡像,如查看Tomcat鏡像(優先選擇官方鏡像start最高的,如果沒有官方鏡像,選擇start最高的)
[root@docker01 ~]# docker search tomcat
#下載tomcat鏡像,不指定版本,默認最新版
[root@docker01 ~]# docker pull tomcat
#指定版本tomcat8.0版本
[root@docker01 ~]# docker pull tomcat:8.0
#查看鏡像列表
[root@docker01 ~]# docker image ls
#導出鏡像(將tomcat8.0鏡像導出並命名為docker_centos_tomcat8.0.tar.gz)
[root@docker01 ~]# docker image save tomcat:8.0 -o docker_centos_tomcat8.0.tar.gz
[root@docker01 ~]# ls
anaconda-ks.cfg docker_centos_tomcat8.0.tar.gz
#刪除鏡像(刪除tomcat8.0鏡像)
[root@docker01 ~]# docker image rm tomcat:8.0
如何進入容器
#使用-it進入centos:6.9容器
[root@docker01 ~]# docker run -it centos:6.9
#容器自己的內核,與宿主機完全沒關系
[root@200732637aef /]# cat /etc/redhat-release
CentOS release 6.9 (Final)
#有自己的根分區
[root@200732637aef /]# ls /
bin etc lib lost+found mnt proc sbin srv tmp var
dev home lib64 media opt root selinux sys usr
#有自己獨立的網卡
[root@200732637aef /]# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02
inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:656 (656.0 b) TX bytes:0 (0.0 b)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
[root@200732637aef /]# exit
#--name表示為容器起名字(容器名字不能重復)
[root@docker01 ~]# docker run -it --name laowang centos:6.9
容器管理
#啟動一個容器
[root@docker01 ~]# docker container start 6d14f5a72ce1
#停止一個容器
[root@docker01 ~]# docker container stop 6d14f5a72ce1
#異常退出容器(一般正常退出)
[root@docker01 ~]# docker container kill 6d14f5a72ce1 .
#查看進程
[root@docker01 ~]# docker ps -a -l
#注意不能刪除正在運行的容器
#刪除所有容器
[root@docker01 ~]# docker rm -f `docker ps -a -q`
6d14f5a72ce1
200732637aef
609fbf238bde
66a6f94df5f6
#進入正在運行的容器(先讓容器夯住)
[root@docker01 ~]# docker run -d centos:6.9 tail -f /etc/hosts
384bcfcf04141f103a89c6c18f4544cadfd44840c6c9d7b5c708bf85fb0d6234
[root@docker01 ~]# docker exec -it 384bcfcf0414 /bin/bash
[root@384bcfcf0414 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:22 ? 00:00:00 tail -f /etc/hosts
root 6 0 0 10:23 pts/0 00:00:00 /bin/bash
root 17 6 0 10:23 pts/0 00:00:00 ps -ef
#生產環境跑的是業務(兩條命令可以讓容器一直運行下去)
[root@docker01 ~]# docker run -d -it centos:6.9 /bin/bash
[root@docker01 ~]# docker run -d centos:6.9 tail -f /etc/hosts
總結:docker容器內的第一個進程(初始命令)必須一直處於前台運行狀態(必須夯住),否則這個容器就會處於退出狀態。