摘要:備份數(shù)據(jù)卷容器中的內(nèi)容,可以參考以下命令恢復(fù)則使用下面的命令基礎(chǔ)命令網(wǎng)絡(luò)配置目前提供了映射容器端口到宿主主機(jī)和容器互聯(lián)的機(jī)制為容器提供網(wǎng)絡(luò)服務(wù)。
基礎(chǔ)命令 - 鏡像管理 獲取鏡像
使用docker pull命令從網(wǎng)絡(luò)上下載鏡像。
docker pull NAME[:TAG]
例如
$ docker pull ubuntu Using default tag: latest latest: Pulling from library/ubuntu 43db9dbdcb30: Downloading 1.494 MB/49.33 MB 2dc64e8f8d4f: Download complete 670a583e1b50: Download complete 43db9dbdcb30: Pull complete 2dc64e8f8d4f: Pull complete 670a583e1b50: Pull complete 183b0bfcd10e: Pull complete Digest: sha256:c6674c44c6439673bf56536c1a15916639c47ea04c3d6296c5df938add67b54b Status: Downloaded newer image for ubuntu:latest
不指定Tag的時候默認(rèn)使用:latest,因此,上述命令實際上是docker pull ubuntu:latest。
查看鏡像信息使用docker images可以列出本地主機(jī)上已有的鏡像列表。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE php latest fe1a2c2228f4 2 days ago 364 MB mongo latest 87bde25ffc68 2 days ago 326.7 MB ubuntu latest 42118e3df429 9 days ago 124.8 MB redis latest 4465e4bcad80 6 weeks ago 185.7 MB nginx latest 0d409d33b27e 8 weeks ago 182.8 MB
還可以使用docker inspect命令查看單個鏡像的詳細(xì)信息
$ docker inspect ubuntu [ { "Id": "sha256:42118e3df429f09ca581a9deb3df274601930e428e452f7e4e9f1833c56a100a", "RepoTags": [ "ubuntu:latest" ], "RepoDigests": [ "ubuntu@sha256:c6674c44c6439673bf56536c1a15916639c47ea04c3d6296c5df938add67b54b" ], }, ... "RootFS": { "Type": "layers", "Layers": [ "sha256:ea9f151abb7e06353e73172dad421235611d4f6d0560ec95db26e0dc240642c1", "sha256:0185b3091e8ee299850b096aeb9693d7132f50622d20ea18f88b6a73e9a3309c", "sha256:98305c1a8f5e5666d42b578043e3266f19e22512daa8c6b44c480b177f0bf006", "sha256:9a39129ae0ac2fccf7814b8e29dde5002734c1699d4e9176061d66f5b1afc95c" ] } } ]
查看單項信息
$ docker inspect -f {{".Config.Hostname"}} ubuntu 827f45722fd6搜索鏡像
使用docker search命令搜索遠(yuǎn)程倉庫中共享的鏡像。
docker search TERM
例如搜索名稱為mysql的鏡像
$ docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used... 2763 [OK] mysql/mysql-server Optimized MySQL Server... 178 [OK]刪除鏡像
使用docker rmi命令刪除鏡像。
docker rmi IMAGE [IMAGE...]
其中IMAGE可以是鏡像標(biāo)簽或者ID。
例如
docker rmi ubuntu docker rmi php:7.0.1創(chuàng)建鏡像
創(chuàng)建鏡像有三種方法:
基于已有鏡像創(chuàng)建
基于本地模板導(dǎo)入
基于Dockerfile創(chuàng)建
使用已有鏡像創(chuàng)建該方法主要使用docker commit命令。
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
包含以下主要選項
-a --author="",作者信息
-m --message="",提交信息
-p --pause=true,提價時暫停容器運(yùn)行
例如
$ docker run -i -t ubuntu:latest /bin/bash root@5a86b68c4e6a:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr root@5a86b68c4e6a:~# exit exit $ docker commit -m "create a new images" -a "mylxsw" 5a86b68c4e6a test-cont sha256:68f1237c24a744b05a934f1317ead38fc68061ade7981eaae158a2ba8da02a9b $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE test-cont latest 68f1237c24a7 3 seconds ago 124.8 MB php latest fe1a2c2228f4 2 days ago 364 MB mongo latest 87bde25ffc68 2 days ago 326.7 MB ubuntu latest 42118e3df429 9 days ago 124.8 MB redis latest 4465e4bcad80 6 weeks ago 185.7 MB nginx latest 0d409d33b27e 8 weeks ago 182.8 MB基于本地模板導(dǎo)入 基于Dockerfile創(chuàng)建 保存鏡像文件
使用docker save命令保存鏡像文件為本地文件。
docker save -o ubuntu_latest.tar ubuntu:latest載入鏡像
使用docker load從本地文件再導(dǎo)入鏡像壓縮包到本地鏡像倉庫。
docker load --input ubuntu_latest.tar 692b4b3b88ff: Loading layer 2.56 kB/2.56 kB Loaded image: ubuntu:latest上傳鏡像
上傳鏡像使用docker push命令。
docker push NAME[:TAG]
默認(rèn)上傳鏡像到DockerHub官方倉庫。
基礎(chǔ)命令 - 容器 創(chuàng)建容器使用docker create命令創(chuàng)建一個容器,使用該命令創(chuàng)建的容器處于停止?fàn)顟B(tài),需要使用docker start命令啟動容器。
docker create -it ubuntu:latest
例如:
$ docker create -it ubuntu ddb96bff9de60765a5c10ef91c684e206866a095ec1dae2dbc66924b65d26602 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ddb96bff9de6 ubuntu "/bin/bash" 10 seconds ago Created grave_shaw
也可以直接使用docker run命令創(chuàng)建并啟動一個新的容器,等價于執(zhí)行命令docker create和docker start。
$ docker run ubuntu /bin/echo "Hello world" Hello world
下面的命令讓docker啟動一個bash終端,允許用于與其進(jìn)行交互
$ docker run -i -t ubuntu /bin/bash root@d808be915a22:/#
-t選項讓docker分配一個偽終端并綁定到容器的標(biāo)準(zhǔn)輸入上,-i則讓容器的標(biāo)準(zhǔn)輸入保持打開。
大多數(shù)情況下,我們希望容器以后臺守護(hù)進(jìn)程的形式運(yùn)行,可以使用-d選項。
$ docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1;done" 1927a78fd6e6ca32dbf6a8efe86d83162dd974e6302d930a1766b44142f33804 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1927a78fd6e6 ubuntu "/bin/sh -c "while tr" 3 seconds ago Up 2 seconds prickly_mcclintock $ docker logs prickly_mcclintock hello world hello world hello world終止容器
使用docker stop命令終止運(yùn)行中的容器。
$ docker stop prickly_mcclintock prickly_mcclintock
進(jìn)入容器容器終止后可以使用docker start命令再次啟動,也可以對運(yùn)行的容器執(zhí)行docker restart使其重啟。
使用-d選項啟動容器后,容器會進(jìn)入后臺運(yùn)行,用戶無法查看容器中的信息。有時候需要進(jìn)入容器進(jìn)行操作,可以使用docker attach命令以及docker exec命令,nsenter等工具。
attach命令docker attach命令是Docker自帶的命令,使用的時候并不太方便,當(dāng)多個窗口attach到同一個容器,所有窗口都會同步顯示。某一個窗口堵塞,其它創(chuàng)建窗口就無法繼續(xù)進(jìn)行操作了。
docker attach prickly_mcclintock
exec命令使用docker attach之后,如果使用Ctrl+C退出,則容器也會退出運(yùn)行
Docker提供了一個更加方便的工具exec,使用它可以直接在容器內(nèi)運(yùn)行命令。
$ docker exec -it 9b3d /bin/bash root@9b3d40ebc289:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr刪除容器
使用docker rm命令刪除處于終止?fàn)顟B(tài)的容器。
docker rm [OPTIONS] CONTAINER [CONTAINER...]
-f --force=false 強(qiáng)制終止并刪除一個運(yùn)行中的容器
-l --link=false 刪除容器的連接,但是保留容器
-v --volumes=false 刪除容器掛載的數(shù)據(jù)卷
導(dǎo)出容器使用導(dǎo)入容器命令可以實現(xiàn)將一個已經(jīng)創(chuàng)建的容器導(dǎo)出到一個文件,一般可以用于容器的遷移。
docker export CONTAINER
例如
docker export 9b3d40 > container-migrate.tar
可以將導(dǎo)出的文件傳輸?shù)狡渌鼨C(jī)器上再進(jìn)行導(dǎo)入。
導(dǎo)入容器使用docker import命令導(dǎo)入容器作為鏡像。
$ cat container-migrate.tar| docker import - test/ubuntu sha256:7cae85635deaacdca3120196d9d068d6fc9980b73b2c904b80354a4ece3ceed5 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE test/ubuntu latest 7cae85635dea 4 seconds ago 109.9 MB基礎(chǔ)命令 - 數(shù)據(jù)管理
容器數(shù)據(jù)管理主要有兩種方式:
數(shù)據(jù)卷
數(shù)據(jù)卷容器
數(shù)據(jù)卷數(shù)據(jù)卷是一個可以供容器使用的特殊目錄,它繞過了文件系統(tǒng),提供了以下特性
在容器之間共享和重用
修改立馬生效
對數(shù)據(jù)卷的更新不會影響鏡像
卷會一直存在,直到?jīng)]有容器使用
在運(yùn)行容器的時候,使用-v選項創(chuàng)建數(shù)據(jù)卷,可以多次使用,創(chuàng)建多個數(shù)據(jù)卷。
$ docker run -i -t --name test-vol -v /Users/mylxsw/Downloads:/opt/aicode ubuntu /bin/bash root@7ab155e22ec7:/# ls /opt/aicode/ PHP2016@DevLink container-migrate.tar removeDocker.sh test-cont.tar ubuntu-test.tar
上述命令將本地的/Users/mylxsw/Downloads目錄映射到了容器的/opt/aicode目錄。
數(shù)據(jù)卷容器可以指定:ro,設(shè)置映射目錄為只讀: -v /Users/mylxsw/Downloads:/opt/aicode:ro,同時,-v也支持掛載單個文件到容器。
如果用戶需要在容器之間共享一些持續(xù)更新的數(shù)據(jù),最簡單的方法是使用數(shù)據(jù)卷容器。數(shù)據(jù)卷容器實際上就是一個普通的容器,專美提供數(shù)據(jù)卷供其他容器使用。
$ docker run -it -v /backup --name backup ubuntu root@be8de791d367:/#
上述命令創(chuàng)建了一個用來作為數(shù)據(jù)卷的容器,接下來創(chuàng)建幾個server容器,用于向該數(shù)據(jù)卷寫入數(shù)據(jù),寫入數(shù)據(jù)后,多個容器之間是互通的。
$ docker run -it --volumes-from backup --name server1 ubuntu
使用--volumes-from指定要數(shù)據(jù)卷容器。
備份數(shù)據(jù)卷容器中的內(nèi)容,可以參考以下命令
docker run --volumes-from backup -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /backup
恢復(fù)則使用下面的命令
docker run -v /backup --name backup2 ubuntu /bin/bash docker run --volumes-from backup2 -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar基礎(chǔ)命令 - 網(wǎng)絡(luò)配置
Docker目前提供了映射容器端口到宿主主機(jī)和容器互聯(lián)的機(jī)制為容器提供網(wǎng)絡(luò)服務(wù)。
端口映射容器中運(yùn)行了網(wǎng)絡(luò)服務(wù),我們可以通過-P或者-p參數(shù)指定端口映射。
-P Docker會隨機(jī)映射一個49000-49900之間的端口到容器內(nèi)部的開放端口。
-p 可以指定要映射的端口,格式為ip:hostPort:containerPort,可以多次使用-p指定多個映射的端口。
例如:
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py docker run -d -p 5000:5000 training/webapp python app.py docker run -d -p 5000:5000/udp training/webapp python app.py docker run -d -P training/webapp python app.py
容器互聯(lián)通信使用docker port [容器名稱] 容器內(nèi)端口 查看端口映射綁定的地址。
docker port nostalgic_morse 5000
容器的鏈接(linking)系統(tǒng)是除了端口映射外的另一種容器應(yīng)用之間交互的方式,它會在源和接收容器之間創(chuàng)建一個隧道,接收容器可以看到源容器指定的信息。
容器之間互聯(lián)通過--link參數(shù)指定,格式為--link name:alias,其中name為要鏈接到的容器的名稱,alias為這個連接的別名。
docker run -d --name mysql-demo -e MYSQL_ROOT_PASSWORD=root mysql docker run --rm --name web --link mysql-demo:db ubuntu env
使用docker ps可以看到容器的連接。
Docker會在兩個互聯(lián)的容器之間創(chuàng)建一個安全的隧道,而且不用映射端口到宿主主機(jī)。Docker中通過兩種方式為容器公開連接信息:
環(huán)境變量 環(huán)境變量的方式采用連接別名的大寫前綴開頭,比如前面的例子中,所有以DB_開頭的環(huán)境變量。
更新/ect/hosts文件 Docker也會添加host信息到父容器的/etc/hosts文件
查看/etc/hosts文件:
docker run --rm --name web --link mysql-demo:db -i -t ubuntu /bin/bashDockerfile
Dockerfile是一個文本格式的配置文件,用戶可以使用Dockerfile快速創(chuàng)建自定義的鏡像。
基本結(jié)構(gòu)一般來說,Dockerfile分為四部分:
基礎(chǔ)鏡像信息
維護(hù)者信息
鏡像操作指令
容器啟動時執(zhí)行的指令
指令指令一般格式為INSTRUCTION arguments。
FROM格式為FROM
FROM ubuntu:latestMAINTAINER
格式為MAINTAINER
MAINTAINER mylxsw mylxsw@aicode.ccRUN
格式為RUN
格式RUN
該命令提供容器啟動時執(zhí)行的命令,每個Dockerfile中只能與一條CMD命令,如果指定了多條,則只有最后一條會被執(zhí)行。如果用戶啟動容器的時候指定了運(yùn)行的命令,則會覆蓋CMD指令。
格式支持三種:
CMD ["executable", "param1", "param2"] 使用exec執(zhí)行
CMD command param1 param2 使用/bin/sh -c執(zhí)行
CMD ["param1", "param2"] 提供給ENTRYPOINT的默認(rèn)參數(shù)
EXPOSE格式為EXPOSE
EXPOSE 22 80 8443
上述指令暴露了22, 80, 8443端口供互聯(lián)的系統(tǒng)使用,使用的時候可以指定-P或者-p參數(shù)進(jìn)行端口映射。
ENV格式為ENV
比如:
ENV PG_MAJOR 9.3 ENV PG_VERSION 9.35ADD
格式為ADD
COPY如果
是tar包的話,會在dest位置自動解壓為目錄。
格式為COPY
ENTRYPOINT注意,ADD命令和COPY命令基本上是一樣的,只不過是ADD命令可以復(fù)制網(wǎng)絡(luò)資源,同時會對壓縮包進(jìn)行自動解壓,而COPY則是單純的復(fù)制本地文件(目錄)。
配置容器啟動后執(zhí)行的命令,并且不會被docker run提供的參數(shù)覆蓋。每個Dockerfile中只能有一個ENTRYPOINT,當(dāng)指定多個的時候,只有最后一個生效。
格式有兩種:
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
VOLUME格式為VOLUME ["/data"],創(chuàng)建一個可以從本地主機(jī)或其它容器掛載的掛載點(diǎn),一般用來存放數(shù)據(jù)庫和需要保持的數(shù)據(jù)等。
USER格式為USER daemon,用于指定運(yùn)行容器時的用戶名或者UID,后續(xù)的RUN命令也會使用指定的用戶。
WORKDIR格式為WORKDIR /path/to/workdir,用于為后續(xù)的RUN,CMD,ENTRYPOINT指令配置工作目錄。
可以多次使用,如果后續(xù)指定的路徑是相對路徑,則會基于前面的路徑。
WORKDIR /a WORKDIR b RUN pwd
則最后得到的路徑是/a/b。
ONBUILD指定基于該鏡像創(chuàng)建新的鏡像時自動執(zhí)行的命令。格式為ONBUILD [INSTRUCTION]。
創(chuàng)建鏡像編寫完Dockerfile之后,就可以通過docker build命令構(gòu)建一個鏡像了。
可以通過.dockerignore指定忽略的文件和目錄,類似于git中的.gitignore文件。
比如
docker build -t build_repo/first_image /tmp/docker_builder
參考:
Docker技術(shù)入門與實戰(zhàn) 楊保衛(wèi) 戴王劍 曹亞倫編著
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/26667.html
摘要:所以這里一般就是執(zhí)行啟動我們應(yīng)用的那條命令。編譯運(yùn)行編譯好的鏡像打開瀏覽器進(jìn)行測試 編譯docker鏡像 1.加速docker鏡像下載速度 取決于網(wǎng)絡(luò)速度,如果不慢的話,可以先不裝 https://www.daocloud.io/mirror#accelerator-doc 執(zhí)行下面的命令配置加速器 curl -sSL https://get.daocloud.io/daotools...
摘要:所以這里一般就是執(zhí)行啟動我們應(yīng)用的那條命令。編譯運(yùn)行編譯好的鏡像打開瀏覽器進(jìn)行測試 編譯docker鏡像 1.加速docker鏡像下載速度 取決于網(wǎng)絡(luò)速度,如果不慢的話,可以先不裝 https://www.daocloud.io/mirror#accelerator-doc 執(zhí)行下面的命令配置加速器 curl -sSL https://get.daocloud.io/daotools...
摘要:時間年月日星期六說明本文部分內(nèi)容均來自慕課網(wǎng)。必填用于執(zhí)行命令,當(dāng)執(zhí)行完畢后,將產(chǎn)生一個新的文件層。可選指定此鏡像啟動時默認(rèn)執(zhí)行命令。可選用于指定需要暴露的網(wǎng)絡(luò)端口號。可選向鏡像中掛載一個卷組。 時間:2017年09月16日星期六說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com 教學(xué)源碼:無 學(xué)習(xí)源碼:無 第一章:課程簡介 1-1 課程介紹 Docke...
摘要:的主要作用是自己根據(jù)基礎(chǔ)鏡像,重新定制鏡像,而不是直接從官方倉庫拿現(xiàn)成的使用。以接下來要構(gòu)建的環(huán)境來說明下,下面我將要搭建一個的開發(fā)環(huán)境,需要進(jìn)行配合。它的主要作用是持久化數(shù)據(jù),避免容器銷毀后內(nèi)部數(shù)據(jù)丟失暴露到宿主機(jī)的端口。 以前一直使用 Vagrant 作為自己的開發(fā)環(huán)境,并且在上家公司也推行大家采用 Vagrant 作為開發(fā)環(huán)境,保障公司使用的是同一套開發(fā)環(huán)境。隨著docker的流...
閱讀 1951·2021-09-28 09:36
閱讀 2516·2021-09-08 09:35
閱讀 3120·2019-08-30 15:53
閱讀 1607·2019-08-30 14:08
閱讀 725·2019-08-29 18:40
閱讀 2914·2019-08-29 13:57
閱讀 2757·2019-08-29 13:55
閱讀 745·2019-08-26 13:45