docker 命令簡介

docker 簡介

docker是什麼呢?給大家描述幾個應用場景吧,描述完大家大概就知道這個東西是用來幹嘛的了。

場景1

  • 相信稍微有點經驗的程序員在開發的過程中都面臨着部署應用的問題,假設你現在在本地辛辛苦苦開發出了一個網站,準備部署。這個時候你就很自然的聯想到應該在服務器上搭建一個和本地運行環境一樣的環境出來。如果是nodejs,雖然已經有了npm,有了各種打包工具,可是你還是面臨着一系列的操作。而且最後還是有可能運行不起來,因爲你的應用可能依賴於系統,讀寫系統文件,或者某些文件忘記拷貝之類的錯誤,讓人難受。而在有了docker之後呢,你可以很方便的將應用通過docker打包起來,從而解決運行環境不一致而導致應用不能運行的問題。

場景2

  • 現在假設,你和你的同事把自己編寫好的代碼都放到了一個程序服務器裏面運行。不小心的是,你的同事程序有問題,內存泄漏而且還很嚴重,吃內存而且還吃得特別的多。尷尬了,你的代碼一放上去,跑不起來,報錯,運行特別的慢。這個時候如果你們的程序是用docker管理的話,這個問題就自然而然的解決了,在運行之前docker會限制好每個應用可用的內存和CPU,並將其和其他的進程隔離。這樣你就可以安心的跑代碼了~

場景3

  • 假設現在你面對一個全新的操作系統,裏面沒有任何應用。現在你寫了一個java web應用。依賴了非常多的東西,有mysql,tomcat,jdk等等等等。你需要一個個的把他們裝上去,有過類似經歷的相信大家都知道,這個過程並不好受,保不住就可能遇到一些問題,然後就需要你話大把大把的時間去配置環境。有了docker之後呢?嘿嘿,這些就免了吧,因爲這些依賴都會被放進一個叫做鏡像的東西,你的代碼可以在鏡像裏面尋找依賴,完成運行。而你的系統呢,只需要一個docker就好了~

聽完上面的描述,docker是不是很誘人啊~在這裏給大家推薦一個docker的視頻教程,挺不錯的:

想要對docker有更深入的瞭解,可以去看這個視頻,我也是從這個視頻過來的,算是個小白。這篇博客也算是一個筆記吧~

簡單docker執行流程

主要是爲了幫助到家快速的建立起對docker一個簡單的印象,這裏放上幾個一連串的命令,大家執行完命令之後就就可以看到第一個docker執行之後的效果。這個,兩分鐘入門,最多了哈哈哈

$su
#apt install docker.io
#service docker start
#docker pull hello-world
#docker run hello-world

在第一個run執行完畢之後呢,會有一段輸出


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 ID:
 https://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

這裏說了一下你執行這個hello world所發生的一些事情。這裏給大家翻譯一下

  1. docker 客戶端連接到docker的守護進程(守護進程:在linux或者unix操作系統中,守護進程(Daemon)是一種運行在後臺的特殊進程,它獨立於控制終端並且週期性的執行某種任務或等待處理某些發生的事件。)
  2. docker的守護進程在收到client的命令之後從Docker Hub(Docker官方的鏡像中心,裏面存放了很多各種各樣的鏡像),下載hello-world鏡像。
  3. 然後你執行了run命令,守護進程會在鏡像(這裏可以假設會某一種環境)創建一個容器,這個容器會執行指定的可執行文件或者命令。
  4. 守護進程通過流的方式將執行的輸出傳送到你的終端。

上圖
這裏寫圖片描述

docker基礎命令

記錄一些docker的命令,爲了以後可以很方便的查閱,也希望爲其他人在學習docker的時候提供一些幫助。

ps: 以上內容都是在ubuntu 16.04 下完成的

  • 安裝docker
$ sudo apt install docker.io
  • 查看docker版本
$docker version
[out]
    version   Show the Docker version information
    volume    Manage Docker volumes
    wait      Block until a container stops, then print its exit code

Run 'docker COMMAND --help' for more information on a command.
pj@lab:~/pro/js/webapp$ docker version
Client:
 Version:      1.12.6
 API version:  1.24
 Go version:   go1.6.2
 Git commit:   78d1802
 Built:        Tue Jan 31 23:35:14 2017
 OS/Arch:      linux/amd64
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
[ps: 這裏指示沒有連接到 docker daemon.目前所知的兩個原因:1. 普通用戶似乎查看不到服務器的狀態,2. 服務沒啓動]
  • 啓動docker 服務
$ sudo service docker start
  • 拉取鏡像
$ sudo docker pull [OPTIONS] <image_name>[:TAG]
[ps] 不加sudo會提示服務沒有運行,這是因爲權限的問題,大概是普通用戶沒有權限修改文件之類的吧

這裏推薦大家用網易蜂巢的docker鏡像倉庫,無他,唯快爾!(在國內,起碼比docker hub快)

  • 查看鏡像
$ sudo docker images 

ps: 太麻煩了,建議大家在處理docker的時候還是直接使用su 命令,使用root用戶的身份來吧。不然每個命令前面都要加上sudo。

  • 運行鏡像
# docker run hello-world
  • 後臺運行鏡像
    一般用於那種需要一直在後臺執行的應用,比如說服務器啊~這樣的話,就不需要長期佔用一個窗口了
# docker run -d hello-world
  • 查看正在運行的鏡像
# docker ps
  • 進入正在執行的鏡像
# docker exec --help
[out]
Run a command in a running container

  -d, --detach         Detached mode: run command in the background
  --detach-keys        Override the key sequence for detaching a container
  --help               Print usage
  -i, --interactive    Keep STDIN open even if not attached
  --privileged         Give extended privileges to the command
  -t, --tty            Allocate a pseudo-TTY
  -u, --user           Username or UID (format: <name|uid>[:<group|gid>])

常用的格式是:

# docker exec -it <docker_image_id(可不完整,能識別就行)> bash

通過上面那條命令,你可以進入一個docker爲了運行程序而虛擬出來的一個操作系統。

  • 結束正在運行的鏡像
# docker stop <docker_image_id>
  • 使用橋接的方式進行端口映射

ps: 爲了幫助理解,這裏爲docker的網絡做一個簡單的介紹。docker中的網絡模式一共有三種:bridge, host, none。最後一種是不開放任何網絡,運行的鏡像和外界沒有任何聯繫。第一個和第二種的話,看圖
這裏寫圖片描述
host模式下,主機網卡和docker container直接相連。也就是說,訪問的主機的端口相當於是直接訪問container 端口。而在bridge模式下,會有一個端口映射的過程,將主機的一個端口映射到container中,當主機的某一個端口有請求的時候,會通過主機網卡到bridge再到container中,請求返回的內容會按照一樣的順序返回到主機網卡再出去。docker默認的啓動方式爲bridge
+ 指定映射端口

# docker run -d -p 8080:80 nginx(假設容器的名稱爲nginx)

這樣當你訪問主機的8080端口的時候,請求會被docker container中的80端口處理並返回出來。

  • 映射到隨機端口
    將開放的所有端口映射到一個隨機端口中
# docker run -d -P nginx
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章