docker 實踐(三)容器管理

一、docker容器概念

docker 容器就是一個虛擬操作系統,只不過只運行在用戶空間而已。


二、容器運行

2.1.docker run 運行參數說明

docker run :創建一個新的容器並運行一個命令

常用參數如下:
-a stdin: 指定標準輸入輸出內容類型,可選 STDIN/STDOUT/STDERR 三項;
-d: 後臺運行容器,並返回容器ID;
-i: 以交互模式運行容器,通常與 -t 同時使用;
-p: 端口映射,格式爲:主機(宿主)端口:容器端口
-t: 爲容器重新分配一個僞輸入終端,通常與 -i 同時使用;
--name="nginx-lb": 爲容器指定一個名稱;
--dns 8.8.8.8: 指定容器使用的DNS服務器,默認和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默認和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 設置環境變量;
--env-file=[]: 從指定文件讀入環境變量;
--cpuset="0-2" or --cpuset="0,1,2": 綁定容器到指定CPU運行;
-m :設置容器使用內存最大值;
--net="bridge": 指定容器的網絡連接類型,支持 bridge/host/none/container: 四種類型;
--link=[]: 添加鏈接到另一個容器;
--expose=[]: 開放一個端口或一組端口;


2.2.運行第一個container

2.2.1.交互式運行,並啓動一個sh終端

# docker run -it busybox /bin/sh
/ # 
/ # 
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # 
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
/ # 
/ # exit

2.3.容器進程

2.3.1.守護進程運行一個容器

# docker run -d --name="ckl-nginx" nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
a5a6f2f73cd8: Pull complete 
1ba02017c4b2: Pull complete 
33b176c904de: Pull complete 
Digest: sha256:5d32f60db294b5deb55d078cd4feb410ad88e6fe77500c87d3970eca97f54dba
Status: Downloaded newer image for nginx:latest
4dc24b453a4a60bd5978adee4495f3e98304dcc05ae8f605e6bd160848973c5d

運行過程說明:

  • 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載

  • 利用鏡像創建並啓動一個容器

  • 分配一個文件系統,並在只讀的鏡像層外面掛載一層可讀寫層

  • 從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中去

  • 從地址池配置一個 ip 地址給容器

  • 執行用戶指定的應用程序

  • 執行完畢後容器被終止

2.3.2.查看容器進程

# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
4dc24b453a4a        nginx               "nginx -g 'daemon of…"   About a minute ago   Up About a minute   80/tcp              ckl-nginx

 容器已經運行,容器啓動端口80,而非本地端口

2.3.3.查看容器詳細信息獲取IP

# docker inspect 4dc24b453a4a
[
    {
	....
	    "Gateway": "172.17.0.1",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "IPAddress": "172.17.0.2",
        "IPPrefixLen": 16,
        "IPv6Gateway": "",
        "MacAddress": "02:42:ac:11:00:02"
	....
	}
}

2.3.4.容器如何與本地主機如何通信

查看本地IP

# ifconfig 
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:58ff:fedb:c79b  prefixlen 64  scopeid 0x20<link>
        ether 02:42:58:db:c7:9b  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 656 (656.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

可以看到,有一個docker0的網絡接口

訪問nginx容器:

# curl http://172.17.0.2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>

2.3.5.查看所有容器進程

# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
4dc24b453a4a        nginx               "nginx -g 'daemon of…"   30 minutes ago      Up 30 minutes               80/tcp              ckl-nginx
3f8af7094f31        busybox             "/bin/sh"                34 minutes ago      Exited (0) 34 minutes ago                       keen_leavitt

可以看出,之前的busybox容器是退出狀態

2.3.6.停止容器

# docker stop 4dc24b453a4a

查看進程:

# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
4dc24b453a4a        nginx               "nginx -g 'daemon of…"   35 minutes ago      Exited (0) 1 second ago                         ckl-nginx
3f8af7094f31        busybox             "/bin/sh"                39 minutes ago      Exited (0) 39 minutes ago                       keen_leavitt

停止的容器狀態爲Exited


2.3.7.啓動一個存在的容器

# docker start 3f8af7094f31
# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
3f8af7094f31        busybox             "/bin/sh"           40 minutes ago      Up 4 seconds                            keen_leavitt


2.3.8.重啓容器

# docker restart 4dc24b453a4a
# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
4dc24b453a4a        nginx               "nginx -g 'daemon of…"   40 minutes ago      Up 10 seconds       80/tcp              ckl-nginx
3f8af7094f31        busybox             "/bin/sh"                43 minutes ago      Up 3 minutes                            keen_leavitt

三、docker進入容器

容器啓動後,如何進入容器?

3.1.進入方法一

# docker attach 3f8af7094f31
/ # 
/ # 
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # exit

3.2.進入方法二

# docker exec -it 3f8af7094f31 /bin/sh
/ # 
/ # 
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # 
/ # exit

四、刪除容器

4.1.刪除運行的容器

# docker rm 4dc24b453a4a
Error response from daemon: You cannot remove a running container 4dc24b453a4a60bd5978adee4495f3e98304dcc05ae8f605e6bd160848973c5d. Stop the container before attempting removal or force remove

容器在運行,無法刪除,需要先停止

# docker stop 4dc24b453a4a
# docker rm 4dc24b453a4a

4.2.刪除所有退出狀態的容器

docker rm `docker ps -a | grep Exited | awk '{print $1}'`


4.3.刪除所有容器

docker rm $(docker ps -a -q)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章