1. 程式人生 > >Docker入門實踐(三) 基本操作

Docker入門實踐(三) 基本操作

Docker安裝完畢,我們就可以試著來執行一些命令了,看看docker可以幹什麼。

(一) 建立一個容器

首先,讓我們執行一個最簡單的容器,hello-world。如果安裝沒有問題,並執行正確的話,應該會出現下面的結果:

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c04b14da8d14: Pull complete
Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
Status: Downloaded newer image for
hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. 3
. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker Hub account: https://hub.docker.com For more examples and ideas, visit: https://docs.docker.com/engine/userguide/

可以看到,上述結果給了我們很多資訊,首先,打印出了一條資訊:Hello from Docker!
接著簡單描述了一下產生該條資訊所經歷的一系列步驟:

1 Docker客戶端連線到守護程序
2 Docker守護程序從Docker Hub拉取了hello-world映象
3 Docker守護程序從該映象建立了一個容器,來執行了命令並輸出了我們當前看的這條訊息
4 Docker守護程序將容器中的標準輸出轉發到你的終端。

需要補充一點的是,docker在執行一個容器時,首先會檢查本地是否存在指定的映象,如果有,則直接執行,如果沒有,才會去Docker Hub上拉取。這也就是命令結果第一行為什麼會顯示Unable to find image 'hello-world:latest' locally的原因。

接下來,我們可以看一下目前所有的容器:

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                    NAMES
1a058b3cde45        hello-world         "/hello"                 3 minutes ago       Exited (0) 3 minutes ago                            gigantic_austin

可以看到,只有一個我們剛才建立的hello-world容器,結果顯示,該容器有一個ID1a058b3cde45,從hello-world映象建立,執行的命令為/hello,當前狀態為3分鐘前已退出,最後還有個namegigantic_austin,需要注意的是,這裡的name看著很奇怪,因為它是隨機生成的,後續我們可以看到如何自定義容器名稱。

需要注意的是,如果你只執行docker ps,將看不到這個結果,因為它預設只顯示正在執行的容器,而我們的hello-world執行完就立馬退出了.
或者,你也可以執行docker ps -l用於檢視最後建立的一個容器。

(二) 檢視本地映象:

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              c54a2cc56cbb        9 weeks ago         1.848 kB

docker images命令可以顯示本機所有的Docker映象。

(三) 線上查詢映象:

如果你不知道都有哪些可用的映象,線上查詢一下或許是個好注意:

直接使用docker search + [你想查詢的映象關鍵字],如:

$ docker search tomcat
NAME                        DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
tomcat                      Apache Tomcat is an open source implementa...   896       [OK]
dordoka/tomcat              Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 ba...   22                   [OK]
consol/tomcat-7.0           Tomcat 7.0.57, 8080, "admin/admin"              16                   [OK]
consol/tomcat-8.0           Tomcat 8.0.15, 8080, "admin/admin"              15                   [OK]
davidcaste/alpine-tomcat    Apache Tomcat 7/8 using Oracle Java 7/8 wi...   10                   [OK]
cloudesire/tomcat           Tomcat server, 6/7/8                            9                    [OK]
...

結果會預設顯示25條記錄,通常第一條為官方映象,即Docker Hub中的映象。官方映象會在OFFICIAL一列顯示[OK]字樣,另外,STARS一列的星星數量顯示了該映象的受歡迎程度,星星越多,表明用的人越多,不過為安全起見,通常建議首選官方映象或自制映象,而不是第三方的。

(四) 拉取映象

使用docker pull [映象名稱[:版本]]可以拉取一個映象:

注: 完整的映象名稱由[repository]/name:[tag]構成,[repository]為倉庫,如果省略,則預設為library,即從Docker Hub拉取;如果省略tag,則預設拉取latest版本,name為映象名稱,不能省略。

$ docker pull tomcat:7
7: Pulling from library/tomcat
8ad8b3f87b37: Pull complete
751fe39c4d34: Pull complete
b165e84cccc1: Pull complete
65f65ec902a1: Pull complete
c7e29d14c31c: Pull complete
ae323d020901: Pull complete
f53151098775: Pull complete
4ee50529773d: Pull complete
e6cd9c8b5720: Pull complete
2274405e7ff7: Pull complete
ba48c8080acc: Pull complete
Digest: sha256:05749aa3217ba008878ff868de824602aaebcd6250c1510e489dbadb81ee37bd
Status: Downloaded newer image for tomcat:7

一個好的實踐是,拉取映象時,總是指定一個明確的版本,這樣能確保在接下來的使用中,明確知道使用的是哪個版本。因為latest版本總是指向最新的版本,這將造成不確定性。

映象拉取完成後,我們可以用它建立一個新的tomcat容器:

$ docker run -d --name tomcat001 -p 8081:8080 tomcat:7
72d39fb16383dc3ce667de4ea2c12b5c42d6cffdf818c6031fafe88fb6751f0a

其中,-d 指定容器在後臺執行;–name用於指定容器的名稱;-p 8081:8080 用於將容器內的8080埠對映到主機的8081埠,你也可以換成其他本機埠.如果需要,你可以建立多個容器使用,需要注意的是,本機對映的埠不能重複,name也不能重複。

檢視當前容器:

$ docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
72d39fb16383        tomcat:7            "catalina.sh run"   3 minutes ago       Up 3 minutes        0.0.0.0:8081->8080/tcp   tomcat001

這時,我們就可以訪問192.168.1.132:8081來檢視執行的tomcat了,注意將IP替換成你的docker主機的IP。

(五) 檢視容器日誌

使用 docker logs 容器名稱可以檢視容器的日誌輸出,-f選項可以指定實時輸出最新日誌,類似於Linux 下的tail -f命令。

$ docker logs -f tomcat001
Sep 05, 2016 10:27:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version:        Apache Tomcat/7.0.70
Sep 05, 2016 10:27:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server built:          Jun 15 2016 16:27:45 UTC
Sep 05, 2016 10:27:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server number:         7.0.70.0
Sep 05, 2016 10:27:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Name:               Linux
Sep 05, 2016 10:27:49 AM 
...
...
INFO: Deployment of web application directory /usr/local/tomcat/webapps/ROOT has finished in 32 ms
Sep 05, 2016 10:27:49 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-apr-8080"]
Sep 05, 2016 10:27:49 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-apr-8009"]
Sep 05, 2016 10:27:49 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 655 ms

(六) 停止容器

$ docker stop tomcat001
tomcat001

(七) 啟動容器

$ docker start tomcat001
tomcat001

(八)刪除容器

刪除一個容器前,需要先停止容器,否則,需要使用 -f選項強制刪除(不推薦)。
另外,如果容器包含資料卷的話,可以使用-v選項連同關聯的資料卷一塊刪除,刪除容器時,預設不刪除資料卷,因為資料卷通常會包含我們的資料。

$ docker rm tomcat001
tomcat001

(九) 卷管理

到這裡,似乎一切都在容器裡,我們的應用好像還沒怎麼跟容器有聯絡。有多種方法可以執行我們的應用,最簡單的就是將應用掛載為容器的一個數據卷,另外更常規的做法是直接把應用製作成一個映象,方便後期的測試及釋出等。容器存放資料的地方主要有兩個,一個是資料卷,類似於Linux下掛載的資料夾;另一個是資料卷容器,即單獨的用於存放資料的容器。關於容器的資料卷及資料卷容器的概念,還需要一篇文章討論,在此就不做深入研究了。
最簡單的使用資料卷的方式就是在建立一個容器時 增加-v選項,我們以一個最簡單的Java web應用為例:

1 首先建立一個目錄:

sudo mkdir -p /opt/data/myapp/ROOT
sudo chown -R $USER:root /opt/data/myapp

注意這裡的$USER變數代表當前執行docker的使用者,即安裝docker時加入docker組的那個使用者,其他使用者可能會導致沒許可權。

2 在/opt/data/myapp/ROOT下建立一個WEB-INF目錄:

$ mkdir /opt/data/myapp/ROOT/WEB-INF

3 新建一個web.xml:

vi /opt/data/myapp/ROOT/WEB-INF/web.xml

貼入以下內容,儲存:

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0"
  metadata-complete="true">

  <display-name>Welcome to Tomcat</display-name>
  <description>
     Welcome to Tomcat
  </description>

</web-app>

4 新建一個jsp頁面:

vi /opt/data/myapp/ROOT/index.jsp

貼入以下內容,儲存:

<!DOCTYPE html>
<html lang="en">
    </body>
        Hello, this is my first docker app!
    </body>
</html>

5 接下來,將我們的應用掛載到容器中:

$ docker run -d --name myapp -v /opt/data/myapp:/usr/local/tomcat/webapps -p 8888:8080 tomcat:7

6 訪問 192.168.1.132:8888就可以了:

docker tomcat

這種方式也是比較初級的用法,不過在本地開發及測試,還是挺方便的。在CI/CD工作流中,應該將應用直接製作為映象。關於如何製作映象,請參考後續文章。

(十) 刪除映象

刪除一個映象前,需要先停止使所有用它的容器,否則會報錯,或者使用 -f選項強制刪除。

$ docker rmi tomcat:7
Error response from daemon: conflict: unable to remove repository reference "tomcat:7" (must force) - container e1226ea69332 is using its referenced image c6c14b3960bd
$ docker rmi tomcat:7
Untagged: tomcat:7
Untagged: [email protected]:05749aa3217ba008878ff868de824602aaebcd6250c1510e489dbadb81ee37bd
Deleted: sha256:967bcc6107b44f28ea76c4448da49d8d12328b39ee7dc48347e833b1d98df143
Deleted: sha256:d77369462cab111671c3797187b3b7473fc64a6039ec06a02af4376ac588ca5a
Deleted: sha256:33fcb0e88cc530b74d4081cb3e665000e829d05d5467a0a8a6fe6e9b4aa23ac8
Deleted: sha256:f08d7b065365610a76636083ac3edf85784ce764fb23f46304953d7e662846ac
Deleted: sha256:bc8a665ce1da8a10d642cb92864da7f5ca6d81483e20a8dfb5c06c2a1cc6473c
Deleted: sha256:3a2471d2c021fec5bc630486a8d5fa11a52068dfb4cf3589921775d6213bde2b
Deleted: sha256:0045842271a87e064b2e8d6b4a560b0eea7b415a80e4d70bb40d6ef247cdb949
Deleted: sha256:467e4252c9c86603b7c441b50a21b6ebd78f2ac6b0ab0236c3e0eb79c3d06e4e
Deleted: sha256:fc18fe11190c806227398f634be2865ae447ff677f052ffbbecea27241f961b1
Deleted: sha256:249266c821ee1779d332c7b7eb496be194109c4b0e99d3adcc4bd3d03cc1167e
Deleted: sha256:d7afd92fb07236c8a2045715a86b7d5f0066cef025018cd3ca9a45498c51d1d6
Deleted: sha256:9e63c5bce4585dd7038d830a1f1f4e44cb1a1515b00e620ac718e934b484c938

(完)

相關推薦

Docker入門實踐() 基本操作

Docker安裝完畢,我們就可以試著來執行一些命令了,看看docker可以幹什麼。 (一) 建立一個容器 首先,讓我們執行一個最簡單的容器,hello-world。如果安裝沒有問題,並執行正確的話,應該會出現下面的結果: $ docker run hell

Docker入門實踐教程-基本夠用了

• Docker是什麼? Docker是基於Go語言實現的雲開源專案,誕生於2013年初,最初是dotCloud公司發起。 Docker通過對應用元件的封裝、分發、部署、執行等生命週期的管理,達到應用元件級別的“一次封裝,到處執行”。這裡應用元件,即可以是Web應用,也可以是一套資料庫服務,

【實戰】Docker入門實踐二:Docker服務基本操作 和 測試Hello World

lag hit 現在 mage spa 關系 .so recommend 不能 操作環境操作系統:CentOS7.2 內存:1GB CPU:2核Docker服務常用命令docker服務操作命令如下service docker start #啟動服務 service doc

Docker入門實踐筆記()一篇文章搞懂Docker下安裝Redis,以及Redis與SpringBoot整合

@Configuration public class RedisConfig { ​ /** * 注入 RedisConnectionFactory */ @Autowired RedisConnectionFactory redisConnectionFacto

Docker 入門實踐

阿裏 虛擬機 true core 環境變量 red dia cnblogs 簡化 歡迎大家前往騰訊雲技術社區,獲取更多騰訊海量技術實踐幹貨哦~ 作者:張戈 導語 本文從新手視角記錄了一個實際的Dokcer應用場景從創建、上傳直到部署的詳細過程,並簡單的介紹了騰訊雲容器服

Git基礎入門(四)Git基本操作2

git 操作 基礎忽略文件: 在實際開發過程中總有些文件無需納入Git的管理,比如日誌文件、臨時文件等 在這種情況下,我們可以在工作目錄中創建一個名為.gitignore的文件,列出要忽略的文件名或者表達式 例:cat .gitignore *.[oa]

Docker入門實踐之dokerfile編寫

DockerDockerfile是一個文本格式的配置文件,通過dockerfile可以快速創建自定義鏡像以適應測試,預發布,生產環境等各種應用部署鏡像,一個好的dockerfile可以讓我們的鏡像更方便管理以及應用。 一. Dokerfile的基本結構 Dockfile是由一行行命令語句組成,並且遲滯以#開頭

Docker入門實踐之dokerfile編寫(2)

docker前面我介紹到dockerfile的常用的指令,本篇將繼續講到dockerfile相關指令。 1. CMD 容器啟動命令 CMD 指令的格式和 RUN 相似,也是兩種格式: shell 格式:CMD <命令> exec 格式:CMD ["可執行文件", "參數1", "參數2"...]

docker系列之file基本操作

IV 情況 文件命名 數據 ... strong ID 支持 默認 dockerfile基礎操作 Dockerfile 是記錄了鏡像是如何被構建出來的配置文件, 可以被 docker 直接執行以創建一個鏡像. 它的樣子: FROM ubuntu:14.04 MAINTAI

跟我一起學docker(四)--容器的基本操作

mage test soft 概念 一起 終端 class 文件系統 caf 1.創建容器Docker的容器十分輕量級,用戶可以隨時創建或刪除容器。 新建容器:docker create Example:docker create –ti ubuntu說明:使用

Docker重要概念及基本操作

一.Docker架構和底層技術簡介 1.Docker Platform Docker提供了一個開發,打包,執行app的平臺 把app和底層infrastructure(physical/virtual物理裝置和虛擬裝置)隔離開來 2.Docker Engi

docker中涉及的基本操作

1 使用scp將宿主機的檔案傳輸到本地.(前提是已經建立好docker與宿主機的檔案對映關係,在宿主機中可以找到對應的檔案) 使用命令scp來進行檔案複製. 先進入要下載檔案的目錄: 如我的是~/qxq/docker/project/non-stationary_texture_sy

docker入門實踐,製作屬於自己的mysql5.7映象

在docker容器中安裝Mysql 在docker容器中安裝Mysql,與直接在centos中安裝是沒有任何區別的,可以參考這篇文章下載必要的安裝包,並進行安裝 https://blog.csdn.net/hl_java/article/details/82852627 在doc

docker入門實踐,我與你一起實戰演練

檢視本地所有的映象 docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE nginx lates

docker入門

如在文件中遇到什麼問題請聯絡作者 QQ:1172796094 本人正在找深圳Java實習工作,求大佬帶飛 —————————————————————————————————————— 映象 映象是docker的三大核心概念之一 docker執行容器前需要本地存在對應的映象,如果映象不存在

NumPy的入門知識和基本操作

基礎 NumPy提供的最主要的物件就是同資料型別的多維陣列(homogeneous multidimensional array)。 他實際上可以被理解成一張表(元素通常是數字),所有元素具有相同的型別,這些元素可以使用由正整數構建的元組(tuple)來索引。 在NumPy

Docker入門實踐(四) 打造自己的開發環境映象

許多Docker映象都是開箱即用的,但有時候卻並不一定滿足我們的需求,比如,你直接從Docker Hub拉取的tomcat 使用的Java VM是Open JDK,但通常我們需要使用Oracle JDK。由於版權問題,Docker Hub無法提供基於Oracle

Docker入門實戰()——用Dockerfile構建映象

在Docker中,構建一個自定義映象共有兩種方法,一是通過commit指令構建,二是通過Dockerfile檔案構建。第一種方式在上篇部落格中已經詳細介紹(Docker入門實戰(二)——Docker映象操作),接下來介紹在Docker中更為常用的方法——使用

Metasploit入門系列()——基本命令

好久不見~ 筆者的出差終於告一段落了, 回到小窩繼續搞事情~ 其實這篇文章我寫了兩天0.0 所以篇幅較長,建議搬個小馬紮慢慢看~ 我是真的真的沒想到,居然被小夥伴們催更了。 突然有動力了,w(゚Д゚)w。 嚶,唉那個廚子,說你呢! start~ 像我們上次提

RHEL 7之docker入門安裝和基本使用

RHEL 7 安裝使用docker 一、簡介 Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面。 二、安裝 Do