Docker初體驗

原文:Docker初體驗 - FindSpace

Introduction

更多關於Docker內容請查看Docker學習筆記目錄

簡單記錄下自己用docker的一些經歷和經驗。並不對docker進行介紹,可自行查閱下面的鏈接。

先發一些閱讀的的東西。

推薦這個簡短的小教程:

Docker 從入門到實踐

這是官方的文檔:

Docker Documents

後面的一些安裝也是按照官方文檔里說的進行。

利用Docker構建開發環境

安裝

我的運行環境:

Debian 8 Jessie x86_64

參考官方文檔

wget -qO- https://get.docker.com/ | sh

系統會要求你輸入sudo的密碼,然後會安裝docker和它的依賴包。

注意在安裝完成的時候,終端里會有個提示,大概意思就是如果你想讓普通用戶也可以運行docker命令,需要把你的用戶添加到docker group里,

sudo usermod -aG docker username

獲取鏡像

先從官網的hub查看都有哪些鏡像可以用

比如點到debian的詳細信息,可以看到支持很多版本:8.3,8,7,等等。右邊有提示命令:

docker pull debian

默認都是latest版本,想要下載指定版本可以通過在後面添加:version:

docker pull debian:stretch

等待下載完成即可

管理鏡像

docker images

在列出信息中,可以看到幾個欄位信息

  • 來自於哪個倉庫,比如 ubuntu
  • 鏡像的標記,比如 14.04
  • 它的 ID 號(唯一)
  • 創建時間
  • 鏡像大小

其中鏡像的 ID 唯一標識了鏡像,注意到 ubuntu:14.04 和 ubuntu:trusty 具有相同的鏡像 ID,說明它們實際上是同一鏡像。

TAG 信息用來標記來自同一個倉庫的不同鏡像。例如 ubuntu 倉庫中有多個鏡像,通過 TAG 信息來區分發行版本,例如 10.04、12.04、12.10、13.04、14.04 等。

進入鏡像

下面的命令指定使用鏡像debian:stretch來啟動一個容器。

docker run -t -i debian:stretch /bin/bash

如果不指定具體的標記,則默認使用 latest 標記信息。-t是指明tag,-i是綁定tty到當前的命令行終端。不然的話,就直接運行一下就結束了,不能產生交互效果。

默認裡面啥也沒有,所以先apt update,然後裝自己需要的就行。因為默認的鏡像源很慢,所以跟修改普通的一個系統一樣,修改sourcelist,再重新update。

進入容器

可以通過docker ps -a獲取當前所有的容器,包括已經退出的。獲得容器的ID之後,可以通過

docker start -i contain_id

後台運行

# docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 2; done"ae60c4b642058fefcc61ada85a610914bed9f5df0e2aa147100eab85cea785dc

它將直接把啟動的container掛起放在後台運行,並且會輸出一個CONTAINER ID,通過docker ps可以看到這個容器的信息,可在container外面查看它的輸出docker logs ae60c4b64205,也可以通過docker attach ae60c4b64205連接到這個正在運行的終端,此時在Ctrl+C退出container就消失了,按Ctrl+P 然後Ctrl+Q可以退出到宿主機,而保持container仍然在運行

另外,如果-d啟動但後面的命令執行完就結束了,如/bin/bash、echo test,則container做完該做的時候依然會終止。而且-d不能與--rm同時使用

可以通過這種方式來運行memcached、apache等。

卸載

官網文檔給的很詳細,

To uninstall the Docker package:

sudo apt-get purge docker-engine

To uninstall the Docker package and dependencies that are no longer needed:

sudo apt-get autoremove --purge docker-engine

The above commands will not remove images, containers, volumes, or user created configuration files on your host. If you wish to delete all images, containers, and volumes run the following command:

rm -rf /var/lib/docker

You must delete the user created configuration files manually.

與宿主機共享數據

官網掛載宿主機文件夾到docker的說明

簡單解釋:

docker run -v /Users/<path>:/<container path>

符合from to的參數規則,先寫from路徑,冒號,to路徑,注意每個路徑後面沒有/,如果路徑不存在,docker會自動創建。注意,這個參數最好寫在前面,起碼是在-ti參數前面。

默認掛載是rw模式,可讀可寫。

埠綁定

我們使用-P標記創建一個容器,將容器的內部埠隨機映射到主機的高埠49000到49900。這時我們可以使用docker ps來看到埠5000綁定主機埠49155。

$ sudo docker ps nostalgic_morseCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESbc533791f3f5 training/webapp:latest python app.py 5 seconds ago Up 2 seconds 0.0.0.0:49155->5000/tcp nostalgic_morse

我們也可以使用-p標識來指定容器埠綁定到主機埠,:前是宿主機埠,後是容器埠

docker run -it -p 5000:5000 ubuntu /bin/bash

刪除容器或者鏡像

刪除任何容器之前,要保證它已經停止了,通過docker stop contain_id,否則會提示你未停止,不能刪除。

刪除容器:

docker rm container_id

刪除任何鏡像之前,要保證沒有任何容器是基於它構建的。

刪除鏡像:

docker rmi image_id_or_name

Reference

docker專題(2):docker常用管理命令(上)

連接容器

Docker —— 從入門到實踐

Docker 和一個正常的虛擬機有何區別?

初探Docker – Docker 跟 LXC 以及一般Hypervisor有何差別?

全面了解Docker


推薦閱讀:

Linux各發行版/桌面環境對於高分屏的支持怎麼樣?
祝賀 Linux 25 歲:25 個關於 Linux 的驚人真相!
裝X - 建立自己的斗圖網站庫
QQ on GNU/Linux 系列 – DeepinQQ 7.9 輕聊版

TAG:Linux | Docker | 虚拟化 |