您好,登錄后才能下訂單哦!
docker容器是另一個核心概念,容器是鏡像的一個運行實例。不同的是鏡像是靜態的只讀文件,容器帶有運行時需要的可寫層,并且容器中的應用進程處于運行狀態。
虛擬機是模擬運行一整套操作系統,docker只運行一個應用和它的運行環境。
[root@docker01 ~]# docker create -it ubuntu:18.04
550c14d7db29b3fbcdff0819546403779f8ce717fa2a5012909b057c2f8b1806
[root@docker01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
550c14d7db29 ubuntu:18.04 "/bin/bash" 34 seconds ago Created kind_rosalind
[root@docker01 ~]# docker start 55
55
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
550c14d7db29 ubuntu:18.04 "/bin/bash" 2 minutes ago Up 5 seconds kind_rosalind
[root@docker01 ~]# docker run ubuntu:18.04 /bin/echo 'hello'
hello
當執行完/bin/echo 'hello'后,容器會自動終止。
當使用docker run來創建啟動容器時會包含:
1、檢查本地是否存在指定鏡像,沒有就從公有倉庫下;
2、利用鏡像創建一個容易,并啟動;
3、分配一個文件系統給容器,并給只讀的鏡像外掛一個可讀寫層;
4、從宿主機的網橋接口橋接一個虛擬機口到容器中;
5、網橋地址池分配一個ip地址給容器;
6、執行用戶應用;
7、容器自動終止
啟動一個bash終端,允許用戶進行交互
[root@docker01 ~]# docker run -it ubuntu:18.04 /bin/bash
root@4d99166324fb:/# pwd
/
root@4d99166324fb:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
-t:為docker分配一個為終端(pseudo-tty)并綁定到容器的標準輸入上
-i:讓容器的標準輸入保持打開
[root@docker01 ~]# docker run -d ubuntu:18.04 /bin/bash -c "while true;do echo 'hello';sleep 1;done"
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a5d805944192 ubuntu:18.04 "/bin/sh -c 'while t…" 4 seconds ago Up 3 seconds frosty_joliot
[root@docker01 ~]# docker logs a5d805944192
hello
hello
hello
...
[root@docker01 ~]# docker run --name test --rm -it ubuntu bash
root@98eedc501dec:/#
另一個終端執行,暫停
[root@docker01 ~]# docker pause test
test
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
98eedc501dec ubuntu "bash" 2 minutes ago Up 2 minutes (Paused) test
恢復
[root@docker01 ~]# docker unpause test
test
[root@docker01 ~]# docker stop test
test
[root@docker01 ~]# docker restart test
test
如果需要進入容器進行操作,推薦使用官方的attach或exec命令。
attach的命令格式為:
docker attach [--detach-key[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER
-detach-key[=[]] #指定退出attach模式的快捷鍵,默認是CTRL+p CTRL+q;
--no-stdin=true|false #是否關閉標準輸入,默認是保持打開;
--sig-proxy=treu|false #是否代理收到的系統信號給應用程序,默認打開;
[root@docker01 ~]# docker run -itd ubuntu:18.04
b82dba0090bcb85fafdeef03e67f9973426965f2792efae73de1c07eb0b44bc2
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b82dba0090bc ubuntu:18.04 "/bin/bash" 52 seconds ago Up 50 seconds fervent_maxwell
[root@docker01 ~]# docker attach fervent_maxwell
root@b82dba0090bc:/#
exec是1.3.0 docker版本后提供的一個更方便的工具,可以在運行中容器內直接執行任何命令。
docker exec [-d|--detach] [--detach-keys[=[]]] [-i|--interactive] [--privileged] [-t|--tty] [-u|--user[=USER]] CONAINER COMMAND [ARG...]
-d #在容器中后臺執行命令
--detach-keys=“ ” #指定容器切回后臺的按鍵
-e #指定環境變量列表
-i #打開標準輸入接受用戶輸入命令,默認為false
--privileged=treu|false #是否給執行命令以最高權限,默認false
-t #分配偽終端,默認false
-u #執行命令的用戶名或ID
[root@docker01 ~]# docker exec -it f2554976971b /bin/bash
root@f2554976971b:/# w
08:02:18 up 2 days, 18:58, 0 users, load average: 0.03, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root@f2554976971b:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 08:01 pts/0 00:00:00 /bin/bash
root 10 0 0 08:02 pts/1 00:00:00 /bin/bash
root 20 10 0 08:02 pts/1 00:00:00 ps -ef
此時會打開一個新的bash終端,不影響容器內其他應用的前提下,用戶與容器進行交互。
可是使用docker [container] rm命令來刪除處于終止或退出狀態的容器。docker [container] rm [-f|--force] [-l|--link] [-v|--volumes] CONTIAINER
-f #是否強制終止并刪除一個運行中的容器
-l #刪除容器的鏈接,但保留容器
-v #刪除容器掛載的數據卷
查看處于停止狀態的容器,并刪除
[root@docker01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2554976971b ubuntu:18.04 "/bin/bash" 46 hours ago Up 46 hours focused_joliot
b82dba0090bc ubuntu:18.04 "/bin/bash" 47 hours ago Exited (0) 46 hours ago fervent_maxwell
[root@docker01 ~]# docker rm b82dba0090bc
b82dba0090bc
用于將容器從一個系統遷移到另外一個系統,這時可以使用docker的導入和導出功能。
1、 導出容器是指,導出一個已經創建的容器到一個文件,不管此時容器是否處于運行狀態。docker [container] export [-o|--output[=""]] CONTAINER
-o #指定導出的tar文件名,也可以直接通過重定向來實現
[root@docker01 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2554976971b ubuntu:18.04 "/bin/bash" 47 hours ago Up 47 hours focused_joliot
a5d805944192 ubuntu:18.04 "/bin/sh -c 'while t…" 2 days ago Exited (137) 2 days ago frosty_joliot
[root@docker01 docker]# docker export a5d805944192 > test_ubuntu2.tar
[root@docker01 docker]# docker export -o test_ubuntu.tar a5d805944192
[root@docker01 docker]# ls
test_ubuntu2.tar test_ubuntu.tar
導出的文件可以使用docker [container] import 命令導入變成鏡像。docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL| -[REPOSITORY[:TAG]]
-c #再倒入的同時執行對容器進行修改的Dockerfile指令
[root@docker01 docker]# docker import test_ubuntu.tar test111/ubuntu:v1.0
sha256:6c5cd99408ca4648c4d3e5560280e75633e3fbcfdba2778d1b69e4353fb27cc9
[root@docker01 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test111/ubuntu v1.0 6c5cd99408ca 13 seconds ago 64.2M
注:docker load和docker import區別在于容器快照(docker import)將丟棄所有的的歷史記錄和元數據信息,僅保存容器當時的快照狀態。鏡像存儲文件(docker load)將保存完整記錄,體積更大。
1、查看容器詳情,docker container inspect [OPTIONS] ONTAINER
[root@docker01 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2554976971b ubuntu:18.04 "/bin/bash" 47 hours ago Up 47 hours focused_joliot
[root@docker01 docker]# docker container inspect frosty_joliot
[
{
"Id": "a5d8059441922d3157d2af1d0ab0a724acf13fbe8bb60ddb92fa2536620c2f84",
"Created": "2020-03-05T05:50:37.692124654Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo hello;sleep 1;done"
],
"State": {
"Status": "exited",
查看某個容器的具體信息,會以json格式返回包括ID、創建時間、路徑、狀態、鏡像、配置等在內的各項信息。
2、查看容器內的進程,docker [container] top [OPTIONS] CONTAINER,類似于linux的top命令,包括PID、用戶、時間、命令等。必須是運行狀態的容器才能查看
[root@docker01 docker]# docker top focused_joliot
UID PID PPID C STIME TTY TIME CMD
root 12365 12348 0 Mar05 pts/0 00:00:00 /bin/bash
root 12431 12348 0 Mar05 pts/1 00:00:00 /bin/bash
3、查看統計信息,docker [container] status [OPTIONS] [CONTAINER],會顯示CPU、內存、存儲、網絡等使用情況的統計信息。
-a,--all #輸出所有容器統計信息,默認僅在運行中
-format string #格式化輸出信息
-no-stream #不持續輸出,默認會自動更新持續實時結果
-no-trunc #不截斷輸出信息
[root@docker01 docker]# docker stats focused_joliot
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
f2554976971b focused_joliot 0.00% 824KiB / 15.51GiB 0.01% 648B / 0B 0B / 0B 2
1、復制文件
container cp支持在容器和主機之間復制文件,docker [container] cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
-a,-archive #打包模式,復制文件會帶有原始的UID/GID信息
-L,-follow-link #跟隨軟鏈接,當原路徑為軟鏈接時,默認只復制鏈接信息,使用該選項會復制鏈接的目標內容。
將本都路徑oglab/python復制到容器的/tmp路徑下
[root@docker01 oglab]# docker cp Python-3.8.2 focused_joliot:/tmp
2、查看變更
[root@docker01 oglab]# docker container diff focused_joliot
A /tmp/Python-3.8.2/Lib/test/test_asyncio/test_streams.py
A /tmp/Python-3.8.2/Lib/test/test_asyncio/test_transports.py
A /tmp/Python-3.8.2/Lib/test/test_asyncio/__init__.py
A /tmp/Python-3.8.2/Lib/test/test_asyncio/echo.py
A /tmp/Python-3.8.2/Lib/test/test_asyncio/test_queues.py
A /tmp/Python-3.8.2/Lib/test/test_distutils.py
A /tmp/Python-3.8.2/Lib/test/test_posixpath.py
A /tmp/Python-3.8.2/Lib/test/test_subclassinit.py
A /tmp/Python-3.8.2/Lib/test/xmltestdata
...
3、查看端口映射,container port命令可以查看容器的端口映射情況,docker container port CONTAINER [PRIVATE_PORT[/PROTO]]
[root@docker01 oglab]# docker container port focused_joliot
4、更新配置,container update命令可以更新容器的一些運行時配置,主要是一些資源限制份額。docker [container] update [OPTIONS] CONTAINER
限制總配額為1秒,容器所占用的時間為10%,單位微妙
[root@docker01 oglab]# docker update --cpu-quota 1000000 f2554976971b
f2554976971b
[root@docker01 oglab]# docker update --cpu-period 1000000 f2554976971b
f2554976971b
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。