柚子快報激活碼778899分享:運維 Docker容器操作
柚子快報激活碼778899分享:運維 Docker容器操作
一、啟動容器
docker run 可以啟動容器,進入到容器,并隨機生成容器ID和名稱。
容器常用命令:
docker ps 運行狀態(tài)的容器 docker ps -a 是看所有的容器 docker ps -aq 看所有容器的id docker create 建立容器 docker start 開啟容器 docker stop 關(guān)閉容器 docker run 先去本地找鏡像,沒有就去網(wǎng)上倉庫拉取,拉取后建立容器 docker cp 真機和容器之間復(fù)制文件 docker rm -f 強制刪除容器 docker exec -it 容器名字(或id) sh 進入容器 docker top 容器id 查看容器中的進程 docker stats 容器id 查看容器的資源使用情況,動態(tài)的。docker stats --no-stream (一次性) docker logs 容器id 查看容器日志
1.1 啟動第一個容器
啟動容器:容器,前提是要有鏡像。通過docker images查看鏡像
這時啟動的容器是在前臺運行的。在開一個終端,通過docker ps -a查看所有的容器
由于運行了一個容器,所以只能查看到一個容器。是Up狀態(tài)。
ctrl+C關(guān)閉后,查看
退出狀態(tài)。
1.2 啟動容器的流程
一開始,Docker會在本機尋找鏡像,判斷本機是否有這個鏡像,如果有就使用這個鏡像運行。如果沒有就去Docker Hub上 下載,Docker Hub是否可以找到,如果能找到,下載這個鏡像到本地使用這個鏡像,如果Docker Hub上也找不到就返回錯誤,找不到鏡像。
1.3 啟動容器用法
幫助: man docker-run?
命令格式:
docker run [選項] [鏡像名] [shell命令] [參數(shù)] #選項: ?
#選項 -i, --interactive ??Keep STDIN open even if not attached,通常和-t一起使用 -t, --tty ??????????分配pseudo-TTY,通常和-i一起使用,注意對應(yīng)的容器必須運行shell才支持進入 -d, --detach ????????Run container in background and print container ID,臺后運行,默認前臺 --name string ??????Assign a name to the container --h, --hostname string Container host name? --rm ????????????????Automatically remove the container when it exits -p, --publish list ??Publish a container's port(s) to the host -P, --publish-all ??Publish all exposed ports to random ports --dns list ??????????Set custom DNS servers --entrypoint string Overwrite the default ENTRYPOINT of the image --restart policy ? --privileged ????????Give extended privileges to container -e, --env=[] Set environment variables --env-file=[] ??????Read in a line delimited file of environment variables
1.4 后臺啟動容器
由于前面我們是前臺啟動的,會影響當前終端的操作環(huán)境,一般都使用后臺啟動。
1.5 設(shè)置容器退出后啟動規(guī)則
policy說明noDefault is no,Do not automatically restart the container when it exits.on-failure[:max-retries]on-failure[:max-retries] Restart only if the container exits with a non-zero exit status. Optionally, limit the number of restart retries the Docker daemon attempts.alwaysAlways restart the container regardless of the exit status. When you specify always, the Docker daemon will try to restart the container indefinitely. The container will also always start on daemon startup, regardless of the current state of the container.unless-stoppedAlways restart the container regardless of the exit status, but do not start it on daemon startup if the container has been put to a stopped state before
[root@Node2 ~]#:docker run -d --restart always nginx
c705d36e04ed2faf8ccc4a20c3be0fc45e8a3a5c20b06131ef2b59e32201adcd
[root@Node2 ~]#:
[root@Node2 ~]#:docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c705d36e04ed nginx "/docker-entrypoint.…" 7 seconds ago Up 6 seconds 80/tcp keen_hellman
5f59606eb2e0 nginx "/docker-entrypoint.…" 5 minutes ago Up 5 minutes 80/tcp agitated_wilbur
99aac3a864fd nginx "/docker-entrypoint.…" 21 minutes ago Exited (0) 16 minutes ago objective_bose
1.6 啟動容器執(zhí)行一次性的命令
????????系統(tǒng)類的容器,啟動后沒有執(zhí)行任何操作,不像 ?httpd,nginx需要持續(xù)向外提供服務(wù), 所以系統(tǒng)類的默認是一次性的容器啟動就退出。
執(zhí)行一個打印輸出的命令,命令執(zhí)行結(jié)束直接退出。
執(zhí)行一次命令后,立即退出。
1.7 使用命令將系統(tǒng)類容器持續(xù)運行
-i 表示要和容器進行交互
-t 分配一個運行終端。
開啟容器,并進入容器。
開一個bash終端,進行交互界面。
?與系統(tǒng)共用內(nèi)核,查看版本:
1.8 退出容器
如果直接使用 exit 那么容器也將停止。
在上面1.7中,已經(jīng)演示了退出容器的操作,使用exit退出容器。
通過查看所有的容器發(fā)現(xiàn),使用exit退出的容器,會直接退出容器,像不像廢話,哈哈。也就是停止容器。
介紹另一種退出的方式:同時按三個鍵,ctrl + p + q 會退出容器,但容器不會停止。
1.9 啟動容器時指定名稱
在以上的啟動容器中,不難發(fā)現(xiàn),啟動后有一個names。這個名字也是隨機生成的。為了便于更好的區(qū)分容器,我們可以自定義取名字。
容器在啟動的時候都會被分配到一個隨機id和一個隨機名字,也可以自定義設(shè)置名字
注意每個容器的名稱要唯一。
1.10 設(shè)置容器內(nèi)的名稱
我們在上面1.7中登錄進入容器后,看到的容器的名稱是容器的id號,我們可以指定容器能的名稱。使用-h選項,后跟容器名稱:
docker run -it -h container1 nginx bash
?
1.11 測試容器,退出容器刪除
在上面1.10中看到使用exit退出容器后,查看所有容器時,發(fā)現(xiàn)退出的容器也存在,并沒有刪除。需要手動刪除。
?使用--rm,在退出容器時,可以直接刪除掉沒有運行的容器。
二、查看容器的狀態(tài)
命令作用docker ps查看容器的狀態(tài)(看不到退出的,可以看到運行的)docker ps -a查看容器的狀態(tài) 包括退出的 , 和運行的docker ps -a -s查看容器的狀態(tài) -s 查看容器的大小docker ps -l查看最近的一個容器狀態(tài)
2.1 顯示當前存在容器
顯示當前運行中的容器,使用命令docker ps
顯示運行和停止的容器,即顯示所有的容器,加-a選項。docker ps -a
如圖:
?如果只顯示停止的容器,使用-f選項,狀態(tài)為exited
2.2 查看容器內(nèi)的進程
語法:
docker top container [ps options]
查看nginx容器中的進程狀態(tài)。
2.3 查看容器資源使用情況
docker stats [OPTIONS] [CONTAINER...] Display a live stream of container(s) resource usage statistics Options: -a, --all ????????????Show all containers (default shows just running) ????--format string ??Pretty-print images using a Go template ????--no-stream ??????Disable streaming stats and only pull the first result ????--no-trunc ??????Do not truncate output
查看單個容器。
動態(tài)查看容器中的狀態(tài)。docker stats [容器id]
查看所有,并且只運行一次 ?
2.4 查看容器的詳細信息
docker inspect 可以查看docker各種對象的詳細信息,包括:鏡像,容器,網(wǎng)絡(luò)等
docker inspect [OPTIONS] NAME|ID [NAME|ID...] Options: -f, --format string ??Format the output using the given Go template -s, --size ??????????Display total file sizes if the type is container
例子:查看容器
inspect不僅可以查看容器詳細信息,還可以查看鏡像詳細信息。
選擇性查看: 元數(shù)據(jù)
?
?可以直接提取容器詳細信息中的IP地址:
2.5 查看容器的日志
docker logs [OPTIONS] CONTAINER 選項: --details ??????Show extra details provided to logs -f, --follow ????Follow log output --since string ??Show logs since timestamp (e.g. 2013-01-02T13:23:37) or? relative (e.g. 42m for ??42 minutes) --tail string ??Number of lines to show from the end of the logs (default? "all") -t, --timestamps ????Show timestamps --until string ??Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or? relative (e.g. 42m ????for2 minutes)
日志顯示太多了,可以顯示前五條日志:
docker --tail 5 -t [容器id號]
也可以向宿主機上的查看日志一樣使用使用-f選項實時查看:
2.6 關(guān)閉和開啟容器
使用stop可以關(guān)閉容器
使用start開啟容器:
三、刪除容器
docker rm [容器id]
可以刪除容器,即使容器正在運行當中,也可以被強制刪除掉,加-f即可強制刪除容器。
docker rm [OPTIONS] CONTAINER [CONTAINER...] docker container rm [OPTIONS] CONTAINER [CONTAINER...]
#選項: ? -f, --force ????Force the removal of a running container (uses SIGKILL)
-v, --volumes ??Remove the volumes associated with the container #刪除停止的容器 docker container prune [OPTIONS] Options: ??????--filter filter ??Provide filter values (e.g. 'until=
刪除容器,可以指定id,也可以指定名字。
?可以指定查看容器的狀態(tài), 顯示出來。
四、進入容器
4.1?attach
????????docker attach 容器名,attach 類似于vnc,操作會在同一個容器的多個會話界面同步顯示,所有使用此方式進入容器的操作都是同步顯示的,且使用exit退出后容器自動關(guān)閉,不推薦使用,需要進入到有shell環(huán)境的容器。
4.2 exec
????????在運行中的容器啟動新進程,可以執(zhí)行單次命令,以及進入容器測試環(huán)境使用此方式,使用exit退出,但容器還在運行,此為推薦方。
格式:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...] 常用選項: ? -d, --detach ??????????????Detached mode: run command in the background -e, --env list ????????????Set environment variables -i, --interactive ????????Keep STDIN open even if not attached -t, --tty ????????????????Allocate a pseudo-TTY #常見用法 docker exec -it 容器ID sh|bash
一次性操作:
一次性操作執(zhí)行命令后,會退出。
持久性操作:
退出后,依舊運行。
五、暴露容器的端口
5.1 暴露容器的隨機端口
由于容器中運行著nginx服務(wù)。我們可以通過docker inspect [容器id]查看詳細信息,找出IP地址。在宿主機訪問該地址:
?????????容器啟動后,默認處于預(yù)定義的NAT網(wǎng)絡(luò)中,所以外部網(wǎng)絡(luò)的主機無法直接訪問容器中網(wǎng)絡(luò)服務(wù),docker run -P 可以將事先容器預(yù)定義的所有端口映射成宿主機的網(wǎng)卡的隨機端口,默認從32768開始使用隨機端口,當停止容器后再啟動可能會導(dǎo)致端口發(fā)生變化。
-P , --publish-all = true | false默認為false
#示例: docker run -P docker.io/nginx ?#映射容器所有暴露端口至隨機本地端口
docker port 可以查看容器的端口映射關(guān)系
格式:
docker port CONTAINER [PRIVATE_PORT[/PROTO]]
只提取IP地址,可以直接:
[root@Node2 data]#:docker inspect -f "{{.NetworkSettings.IPAddress}}" web1
172.17.0.2
通過訪問該本機的IP加端口
5.2 指定端口映射
除了隨機端口外,還可以生成指定端口:
docker run -p 可以將容器的預(yù)定義的指定端口映射到宿主機的相應(yīng)端口
注意: 多個容器映射到宿主機的端口不能沖突,但多個容器內(nèi)使用的端口可以相同
5.2.1 容器80端口映射宿主機本地隨機端口
docker run -p 80 -d --name apache httpd
5.2.2 容器80端口映射到宿主機本地端口81
docker run -p 81:80 --name httpd-apache httpd
-p 81:80? ? ? ?????????????????????????-p 宿主機端口:容器中指定服務(wù)的端口
容器中的httpd服務(wù)主頁面在:
5.2.3 宿主機本地IP:宿主機本地端口:容器端口
指定網(wǎng)卡,宿主機本地IP
如果宿主機有多個網(wǎng)卡,可以把容器的端口映射到指定網(wǎng)卡地址的指定端口上,由于我這里只有一塊網(wǎng)卡:還指定在該網(wǎng)卡上。
docker run -p 192.168.114.20:82:80 -d --name zhiding_ApachePort httpd
docker run -p 本機地址:本機指定端口:容器端口 后臺運行 指定名字 鏡像
訪問測試:
5.2.4 宿主機本地IP:宿主機本地隨機端口:容器端口,默認從32768開始
宿主機的IP:宿主機IP的隨機端口:容器中服務(wù)的端口。默認從32768開始
docker run -p 192.168.114.20::80 -d --name suiji_port httpd
測試;
5.2.5?宿主機本機ip:宿主機本地端口:容器端口/協(xié)議,默認為tcp協(xié)議
指定協(xié)議,默認是tcp。
docker run -p 192.168.114.20:83:80/udp -d --name ctner_udp httpd
5.2.6?一次性映射多個端口+協(xié)議
docker run -p 8080:80/tcp -p 8443:443/tcp -d --name some_port httpd
六、傳遞運行命令
????????容器需要有一個前臺運行的進程才能保持容器的運行,通過傳遞運行參數(shù)是一種方式,另外也可以在構(gòu)建鏡像的時候指定容器啟動時運行的前臺命令,容器里的PID為1的守護進程的實現(xiàn)方式。
服務(wù)類: 如: Nginx,Tomcat,Apache ,但服務(wù)不能停
命令類: 如: tail -f /etc/hosts ,主要用于測試環(huán)境,注意: 不要tail -f <服務(wù)訪問日志> 會產(chǎn)生不必要的磁盤IO。
拉取一個系統(tǒng)類的容器,alpine,他是一個及簡版的系統(tǒng)。
把那些容器刪除掉;清除一下。
運行系統(tǒng)類的容器時不可以持久,后臺運行-d,也會自動退出 如下:
可以在運行時加入一些前臺執(zhí)行的命令,那么就可以持久執(zhí)行:這個看到是前面一個
這里ls -l /etc/hosts是一次性命令,執(zhí)行完就結(jié)束了。所以不會持久運行。
前臺執(zhí)行的命令實時執(zhí)行的比如tail -f 命令。持久運行
七、容器內(nèi)部的hosts文件本地域名解析文件
? ? ? ? 容器會自動將容器的ID加入自已的/etc/hosts文件中,并解析成容器的IP。
例如:一次性查看主機名:
進入容器,查看主機名?
人為的修改 hosts 文件 --add-host 添加指定信息
添加了hosts文件。
八、指定DNS域名解析服務(wù)器
容器的dns服務(wù)器,默認采用宿主機的dns 地址,可以用下面方式指定其它的DNS地址
將dns地址配置在宿主機
在容器啟動時加選項 --dns=x.x.x.x
在/etc/docker/daemon.json 文件中指定
例子: 容器的DNS默認從宿主機的DNS獲取
[root@Node2 data]#:docker run -it --rm --name a1 --add-host www.alpi.com:6.6.6.6 --add-host www.accp.com:9.9.9.9 alpine
拉取一個centos的系統(tǒng)鏡像:?
?指定容器的dns
九、容器內(nèi)和宿主機之間復(fù)制文件
容器內(nèi)與宿主機之間的文件復(fù)制:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH Options: ??-a, --archive ??????Archive mode (copy all uid/gid information) ??-L, --follow-link ??Always follow symbol link in SRC_PATH
例子:docker cp 命令 容器宿主機之間的拷貝
將容器中的文件,拷到本地
語法:docker cp 容器id:要復(fù)制的文件路徑/容器中的文件夾 本地路徑
?將本地文件復(fù)制到容器中。
docker cp -a /data/test.txt fddb783057f8:/
十、容器傳遞參數(shù)
????????有些容器運行時,需要傳遞變量,可以使用 -e <參數(shù)> 或 --env-file <參數(shù)文件> 實現(xiàn)
范例: 傳遞變量創(chuàng)建MySQL
變量參考鏈接: https://hub.docker.com/_/mysql
拉取一個mysql的鏡像
運行容器, 添加屬性
?刪除容器id,添加屬性。
進入容器,下載客戶端工具。?
?準備變量文件
在最后添加兩行,server-id和二進制
[root@Node2 data]#:vim /etc/my.cnf
......
server-id=100
log-bin=mysql-bin
?
通過查看m2對應(yīng)的端口發(fā)現(xiàn),容器中的3306對應(yīng)我們指定的宿主機的端口3307。
---end---
柚子快報激活碼778899分享:運維 Docker容器操作
文章來源
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。