日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker入门(一) - 仓库、容器、镜像、数据卷

發(fā)布時間:2025/4/16 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker入门(一) - 仓库、容器、镜像、数据卷 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Docker 是一個開源的應用容器引擎,讓開發(fā)者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發(fā)布到任何流行的 Linux 機器上,也可以實現(xiàn)虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。
Docker的面世讓我們解決很多工程上面的問題,下面來看一下Docker的特性和優(yōu)點 `特性` * 倉庫 - 顧名思義,就是存放docker的一個整體倉庫,可以通過redis、mysql、nginx等進行分類,也可以通過工程a1、a2、a3進行分類。 * 鏡像 - 運行環(huán)境的靜態(tài)體現(xiàn),就是整合好但是沒起來的“運行環(huán)境”。 * 容器 - 通過啟動鏡像跑起來的“運行環(huán)境”,這個時候就是一個裝在容器里的小型操作系統(tǒng)。`優(yōu)點` * 隔離性 - (分離測試環(huán)境) 虛擬機時代經常會遇到測試環(huán)境公用一套無法獨立測試而導致多人同時開發(fā)阻塞在測試環(huán)境上。 * 持續(xù)集成 - (快速擴容)只需要簡單的導入導出操作,既可快速搭建第二套環(huán)境,還有比這更方便的么?

一.倉庫

1.下載倉庫

由于docker鏡像源在海外,需要借助DaoCloud加速器來進行加速

? docker pull centos Using default tag: latest latest: Pulling from library/centos 45a2e645736c: Pull complete Digest: sha256:6e45de12a92ce6fcc0e3d0ffca8000833675f96679b3f1ecf71485c339826f27 Status: Downloaded newer image for centos:latest

二.鏡像

1.查看鏡像

? docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 104bec311bcd 2 weeks ago 129 MB

2.創(chuàng)建鏡像

創(chuàng)建鏡像有3種方法

1.基于已有鏡像的容器創(chuàng)建

參考保存鏡像例子

2.基于本地模板的導入

OPEN-VZ模板下載模板

? cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04

3.基于Dockerfile創(chuàng)建(存處鏡像到本地文件)

? docker save -o ubuntu_14.04.tar ubuntu:latest? docker ubuntu:latest? docker load --input ubuntu_14.04.tar or ? docker load < ubuntu_14.04.tar

3.編輯鏡像

編輯退出過后,不會保存修改的內容,需要自行保存鏡像(類似maven的提交)。

? docker run -t -i ubuntu /bin/bash root@a61446f099f3:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@a61446f099f3:/# touch a root@a61446f099f3:/# ls a bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@a61446f099f3:/# exit

4.保存鏡像

docker commit -m [提交版本信息] -a [作者] [編輯鏡像的鏡像的容器的ID:a61446f099f3] [目標鏡像的倉庫名:tag]

可壓縮鏡像大小

docker export [提交版本信息] | docker import - [目標鏡像的倉庫名:tag]

? docker commit -m 'first commit' -a 'ellis' a61446f099f3 ubuntu:test sha256:9a0c4d4bb4e8766cf250bb5620fa4d8364fc59bb3ea5919cd7b72f751ddb4019? docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu test 9a0c4d4bb4e8 3 minutes ago 129 MB ubuntu latest 104bec311bcd 2 weeks ago 129 MB

5.查詢鏡像

? docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relati... 3625 [OK] mysql/mysql-server Optimized MySQL Server Docker images. Crea... 237 [OK] centurylink/mysql Image containing mysql. Optimized to be li... 47 [OK] sameersbn/mysql 41 [OK] zabbix/zabbix-server-mysql Zabbix Server with MySQL database support 20 [OK] zabbix/zabbix-web-nginx-mysql Zabbix frontend based on Nginx web-server ... 11 [OK] appcontainers/mysql Centos/Debian Based Customizable MySQL Con... 8 [OK] marvambass/mysql MySQL Server based on Ubuntu 14.04 7 [OK] dnhsoft/mysql-utf8 Inherits the official MySQL image configur... 4 [OK] bitnami/mysql Bitnami MySQL Docker Image 3 [OK] alterway/mysql Docker Mysql 3 [OK] frodenas/mysql A Docker Image for MySQL 3 [OK] drupaldocker/mysql MySQL for Drupal 2 [OK] yfix/mysql Yfix docker built mysql 2 [OK] coscale/mysql CoScale custom configuration of the offici... 1 [OK] newrelic/mysql-plugin New Relic Plugin for monitoring MySQL data... 1 [OK] lysender/mysql MySQL base image using Ubuntu 16.04 Xenial 1 [OK] projectomakase/mysql Docker image for MySQL 0 [OK] nanobox/mysql MySQL service for nanobox.io 0 [OK] dockerizedrupal/mysql mysql-for-docker 0 [OK] cloudposse/mysql Improved `mysql` service with support for ... 0 [OK] 1maa/mysql MySQL database 0 [OK] captomd/mysql CaptoMD mysql configuration 0 [OK] tozd/mysql MySQL (MariaDB fork) Docker image. 0 [OK] treenity/mysql Mysql5.7 with OSx permission fixs 0 [OK]

6.刪除鏡像

  • 當同一個鏡像存在多個標簽的時候,只是刪除指定的標簽,而不影響鏡像文件。
  • 當鏡像只存在一個標簽的時候,刪除則會執(zhí)行操作刪除鏡像文件的AUFS層。
? docker rmi mysql:latest Untagged: mysql:latest Untagged: mysql@sha256:116171866ef2a194368a1760c9ef8c80a75ff6bd28fd25d836d29ce1fcc8173a Deleted: sha256:594dc21de8de7cdae01ecbd4d8a4dedead73756984896a00fce13cbc8c24f38e Deleted: sha256:597ae92858cafe843838c2f7b5768fb657d8e67aa46fa9313267c8fed1e5339f Deleted: sha256:31913f2e2b61577119ac02c90a7c803355dc471880c6b0b9da09aef6efb60979 Deleted: sha256:f6d702dc6a290c6e5d7a53879f3b0251daa24d41924841f90543666d3e237ff5 Deleted: sha256:5105103084f4c6ec91437ffa86e7d2929a3ac53805eb585c378c7935c03c6b42 Deleted: sha256:50a36ecefa69b886268dd91785e88074b3f48447f9b9a3d90c7d56ad2b76a8c3 Deleted: sha256:12c2fd29169d6fb77177a6c892ac289df304a0694bc79c5f9939035c5f695f1e Deleted: sha256:d8e052f68f5ab9766b5927174e52b8ff23e5c7427afcc30aef6cc53c24a4d4e3 Deleted: sha256:9042efb93af5246dbc36ffd103a8b87e8d39e797e06656fb5df053ca77378eb9 Deleted: sha256:c08bac17c414ebfb8d22b46b79d4c1fc41d16a4452c924c306cbec673d215d43 Deleted: sha256:30499d7d4e67556242cabe7be7b1bac2a94d7ff00972c6236475858a91b4b2a7 Deleted: sha256:b6ca02dfe5e62c58dacb1dec16eb42ed35761c15562485f9da9364bb7c90b9b3
  • 刪除none鏡像
? docker rmi $(docker images -f "dangling=true" -q)
  • 當鏡像創(chuàng)建的容器存在時,無法刪除鏡像文件,需要先刪除依賴該鏡像的所有容器,再刪除鏡像。
? docker run ubuntu:test echo 'hello world' hello world? docker rmi ubuntu:test Error response from daemon: conflict: unable to remove repository reference "ubuntu:test" (must force) - container 2761fed757c1 is using its referenced image 9a0c4d4bb4e8? docker docker rm 2761fed757c1 8d1488449db9? docker rmi -f 9a0c4d4bb4e8 Untagged: ubuntu:test Deleted: sha256:9a0c4d4bb4e8766cf250bb5620fa4d8364fc59bb3ea5919cd7b72f751ddb4019

7.上傳鏡像

首先需要登陸,然后設置對應賬戶的tag才能上傳,下面舉例子上傳的是test的倉庫到用戶xxxx里。

? docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: ${xxxx} Password: Login Succeeded? docker images REPOSITORY TAG IMAGE ID CREATED SIZE test latest 104bec311bcd 2 weeks ago 129 MB ubuntu latest 104bec311bcd 2 weeks ago 129 MB mysql 5.7 594dc21de8de 2 weeks ago 400.2 MB? docker tag test:latest xxxx/test:latest? docker docker push xxxx/test:latest The push refers to a repository [docker.io/xxxx/test] 5972ebe5b524: Preparing 3d515508d4eb: Pushing [==================================================>] 4.608 kB bbe6cef52379: Preparing 87f743c24123: Pushing [==================================================>] 15.87 kB 32d75bc97c41: Preparing

三.容器

1.創(chuàng)建/啟動/關閉

從啟動到關閉

? docker create -it test:latest 11ad937149a8750487e72cf0a696b85927388acbadcba3138d821fbe06ba9c18? docker start 11ad937149a8 11ad937149a8? docker stop 11ad937149a8 11ad937149a8等價于? docker run ubuntu /bin/echo "Hello world" Hello world

2.進入容器

-t 讓Docker分配一個偽終端并綁定到容器的標準輸入上
-i 讓容器的標準輸入保持打開

? docker run -t -i test:latest /bin/bash root@b7a06bcfe3e2:/#

3.后臺運行

執(zhí)行指令 ? docker run -d test:latest /bin/sh -c "while true;do echo hello world; sleep 1; done" 7a964175acc1b91a9358c6a4ae7eff53e57d053ffabbd956de4ad8212298ed08查看容器進程 ? docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7a964175acc1 test:latest "/bin/sh -c 'while tr" 9 seconds ago Up 8 seconds desperate_fermat查看容器日志 ? docker logs 7a964175acc1 hello world hello world終止容器 ? docker stop 7a964175acc1 7a964175acc1 or ? docker kill 7a964175acc1 7a964175acc1重啟容器 ? docker restart ecb24cdd42f2 ecb24cdd42f2

4.回到容器

使用-d參數(shù)的時候,容器啟動就后臺運行了,需要進入這些后臺運行中的容器會用到attach。

? docker attach 7a964175acc1 hello world hello world

但是當使用attach退出來的時候,后臺進程也會跟著結束。自Docker1.3版本起,可以使用exec直接啟動一個bash。

? docker exec -ti 7a964175acc1 /bin/bash root@7a964175acc1:/#

5.刪除容器

-f --force=false強行終止并刪除一個運行中的容器
-l --link=false刪除容器的連接,但保留容器
-v --volumes=false刪除容器掛載的數(shù)據(jù)卷

? docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ecb24cdd42f2 test:latest "/bin/sh -c 'while tr" 19 minutes ago Exited (0) 8 minutes ago small_wescoff? docker rm ecb24cdd42f2 ecb24cdd42f2? docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7a964175acc1 test:latest "/bin/sh -c 'while tr" 20 minutes ago Up 5 minutes desperate_fermat ? docker rm 7a964175acc1 Error response from daemon: You cannot remove a running container 7a964175acc1b91a9358c6a4ae7eff53e57d053ffabbd956de4ad8212298ed08. Stop the container before attempting removal or use -f ? docker rm -f 7a964175acc1 7a964175acc1

6.導出容器

? docker docker export 67926c2742d8 > test_for_run.tar ? docker ls test_for_run.tar

7.導入容器

? cat test_for_run.tar| docker import - mdxdjh/test:v1.0 sha256:22673bf214f309ebdcb129380bb71d6af0a0fae1053fa9863b73484d61926798 ? docker images REPOSITORY TAG IMAGE ID CREATED SIZE mdxdjh/test v1.0 22673bf214f3 2 seconds ago 110.9 MB

四.數(shù)據(jù)卷

1.創(chuàng)建數(shù)據(jù)卷

/tmp為本地路徑,/var/tmp為容器
ro 只讀,rw 讀寫

? ls /tmp a? docker run -tid --name myTmp -v /tmp:/var/tmp:ro test1:latest 31f0d584d5592c5bf147b4dba3a80f6dff3bac7da79ae94ec8b5efc90f1ee05b? docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 31f0d584d559 test1:latest "/bin/bash" 10 seconds ago Up 8 seconds elegant_golick? docker exec -ti 31f0d584d559 /bin/bash root@31f0d584d559:/# ls /var/tmp/ a

2.數(shù)據(jù)卷共享

  • 先創(chuàng)建一個數(shù)據(jù)卷myTmp,通過綁定共享到給anotherTmp1,再通過anotherTmp1共享給anotherTmp2達到級聯(lián)共享的效果
  • 刪除anotherTmp1和anotherTmp2不會造成myTmp數(shù)據(jù)卷內容丟失,刪除myTmp(父)會導致anotherTmp1和anotherTmp2數(shù)據(jù)級聯(lián)刪除
? docker run -ti --volumes-from myTmp --name anotherTmp1 test1:latest root@fe2e007b1f96:/# ls /var/tmp/ a? docker run -ti --volumes-from anotherTmp1 --name anotherTmp2 test1:latest root@9a35e7fc68cb:/# ls /var/tmp/ a

3.刪除數(shù)據(jù)卷

-v 刪除關聯(lián)的容器

? docker rm -v 9a35e7fc68cb

總結

以上是生活随笔為你收集整理的Docker入门(一) - 仓库、容器、镜像、数据卷的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。