Docker 1.12 實戰 (三)容器部署

一、容器管理

 # 運行一個容器

[root@x201t ~]# docker run  參數  容器名稱[:tag]    [執行的命令]

參數:

-i  保持和docker 容器內的交互,啓動容器是運行的命令結束後,容器依然存活,沒有退

    出(默認是會退出,即停止的)

-t   爲容器的標準輸入虛擬一個tty

-d   後臺運行容器

--rm  容器在啓動後,執行完成命令或程序後就銷燬(不可於 -d 一起使用)

--name  給容器起一個自定義名稱

 --restart   docker 1.12 新增加的參數,用來指定容器的重啓策略,當前提供的策略包括:

     no       默認值,如果容器掛掉不自動重啓。

     on-failure   當容器以非 0 碼退出時重啓容器,同時可接受一個可選的最大重啓

           次數參數 (e.g. on-failure:5).

     always    不管退出碼是多少都要重啓,就算是你重啓了docker daemon 服務,

        容器也會同時跟着重啓。

--cap-add   允許容器裏可以使用的功能或命令,例如:


*更改容器接口狀態

docker run --cap-add=NET_ADMIN ubuntu sh -c "ip link eth0 down"

 

--cpa-drop  禁止容器裏使用功能或命令,例如

* 禁止使用 chown 命令

docker run --cap-drop=CHOWN ...

 

 

注意:運行一個容器時,若只是指定了鏡像名,而沒有指定其tag,docker默認會以taglatest(最新版本)的鏡像去啓動容器,假如沒有這個鏡像(實際上在使用一個鏡像啓動一個容器時,當這個容器不存在於本地時,docker會去默認配置好的鏡像倉庫下載這個鏡像),則先會報錯;之後會試着下載這個鏡像,下載成功後再次運行容器和所要執行的命令。

wKioL1gjJTuDFnVmAAFCjifPVpU585.png

 

 

直接指定tag的時候,就會直接用所指的的鏡像運行容器以及執行所指定的命令;如下圖:

wKiom1gjJXXDK-sbAADdxncdYhA410.png 

 

#查看正在運行的容器狀態信息

[root@x201t ~]# docker ps

wKioL1gjJirCPc0DAABxh1K9oPA890.png 

CONTAINER ID    容器ID

IMAGE         容器依賴的鏡像

COMMAND        啓動容器時執行的命令或程序

CREATED        容器啓動時到現在的相隔時間

STATUS         容器狀態

PORTS         宿主機到容器的端口映射


當運行一個容器的時候,沒有用參數--name去指定容器名時,Docker會從自己的名稱庫中隨機給這個容器起一個名字。

 

#查看所有的容器

[root@x201t ~]# docker  ps  -a

wKioL1gjKNXgvM3MAABKb2AJSaw004.png

 

#查看最近一次啓動的那個容器信息

[root@x201t ~]# docker ps  -l

wKioL1gjKSfwFIUFAAAku4-1sFM837.png

 

 當退出當前容器後,或者容器內的程序(命令)執行結束後,容器會自動進入停止狀態(除非運行時使用的參數 -d)

#重新啓動一個處於停止狀態的容器

[root@x201t ~]# docker  start   容器名稱或者容器ID

 

#停止一個容器,比如停止後臺運行的容器

[root@x201t ~]# docker stop   容器名或者ID

 

#刪除一個容器

[root@x201t ~]# docker rm  [-f] 容器名或者ID

  -f 是刪除一個正在運行中的容器

 

#執行一個正在運行中的容器內的命令

語法:docker  exec   容器名/容器ID(不是鏡像名/鏡像ID)  執行的名稱  [參數]  

[root@x201t ~]# docker exec clever_swanson cat /etc/redhat-release

CentOS Linux release 7.2.1511 (Core)

 

# 進入到一個正在運行中的容器

當使用 -d 參數時,容器啓動後會進入後臺運行。某一些時候需要進入容器內操作,目前有兩種方法:

attach 命令和nsenter工具

 

[root@x201t ~]# docker attach   centos

注意:這種方式,當你退出容器後(在容器裏的終端裏輸入exit或[Ctrl]+d退出時),這個容器就會處於停止狀態;不論之前他是否以後臺方式運行。以爲exit會想容器的主進程發送一個SIGKILL信號。

解決辦法是:[Ctrl]-p+[Ctrl]-q

就是先按[Ctrl]+p鍵,接着再按[Ctrl]+q

 

還有另外一種方式(推薦):

使用nsenter工具,需要安裝 util-linux 軟件包

[root@x201t ~]# yum  install util-linux  -y

先獲取到運行中的容器的pid

[root@x201t ~]# docker inspect  --format   "``.`State`.`Pid`"  clever_swansonrc

8503

再通過 nsenter 命令通過PID進入到容器,這樣再退出容器後,容器會是運行狀態

[root@x201t ~]# nsenter  --target  8503   --mount  --uts  --net  --ipc  --pid

[root@cbe9955a3303 /]#

 

生產中經常會用到,所以應該把他編寫成一個小腳本

[root@x201t ~]# cat  indocker.sh

#!/bin/bash

# 功能:用於進入到一個正在運行的容器中。

container_pid=`docker inspect --format "``.`State`.`Pid`"  $1`

nsenter --target ${container_pid} --mount  --net  --uts --ipc  --pid

# end

 

更簡單法方法是下載一個文件: .bashrc_docker,下載後把其文件的內容追加到.bashrc中。

這個文件中主要包含了兩個命令和一個函數

docker-pid  <container>  用來獲取運行中容器的PID

docker-ip   <container>  用來獲取運行中容器的IP

Docker-enter  <container>  用來進入一個運行於後臺的容器

[root@x201t~]# wget  -P  \

 ~   https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker

[root@x201t~]# echo  ~/.bashrc_docker  >>~/.bashrc;source  ~/.bashrc_docker

 

# 導入導出容器,就像是給容器做快照和恢復快照

導出容器用 docker export 命令

wKioL1gjKwGyGOS7AACNEIkCJXw724.png

 

導入容器用 docker import 命令

把導出的容器快照文件作爲標準輸入,導入爲新的鏡像

wKioL1gjK5PS_z00AADIrcxSOPw742.png

 

注意:

docker import 和docker  load的區別在於,load 是用來導入鏡像存儲文件到本地鏡像庫的,鏡像存儲文件是用save從本地鏡像庫保存到本地硬盤的鏡像備份文件,一般容量相對容器的快照文件較大,保存的是完整的記錄,導入時,不能重新指定標籤(log)等元數據信息;而import導入的是容器的快照文件,容器的快照文件體積較小,它丟棄了歷史記錄和元數據信息,僅僅保存容器當時的快照狀態。

#查看容器運行時的內部輸出信息,用命令 docker logs  <容器ID|容器名>

wKiom1gjLAWxgR59AAC2JDWNjQ0703.png 

 

#查看容器的元數據信息,有啓動時執行的命令或程序、運行時的IP、所使用的鏡像等。

命令:docker  inspect  <容器ID|容器名>

[root@x201t ~]# docker  inspect   clever_swanson

 

#重命名容器名稱

[root@x201t ~]# docker rename  OLD_NAME  NEW_NAME

 

#創建一個新的容器,常用於啓動一個mysql數據庫時

1. 初始化mysql

[root@x201t ~]# docker create --name  mydb1 -e MYSQL_ROOT_PASSWORD=123  \

-p 3306:3306 mysql


注意:這裏mysql容器啓動的時間可能會稍長些,因爲這時候在初始化數據庫


#  --name  給容器起個名字

#  -e  MYSQL_ROOT_PASSWORD   設置容器的ENV,這裏給數據庫root用戶設置密碼 

#  -p  把本地的3306端口映射到容器的3306端口

#  /  這是shell命令行裏的換行符

2. 啓動這個mysql容器

[root@x201t ~]#docker start mydb1


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