寫作目的:
本人在學習 Docker 時也是看了官方Docs和極客學院的教程,以及各種博客,可能本人愚鈍并未看太懂,后來上手操作后理解 Docker 。
所以這是一篇 個人認為 更快速讓大家能夠 使用 以及 理解 Docker 的指南。
所以
如果還不知道Docker是什么,那趕快去google一下吧。
如果不知道Docker能做什么,那繼續(xù)往下看。
以下是正文
此指南新手操作下來,大概需要20分鐘左右
老鳥5分鐘不到就完事
目錄
- Docker 安裝
- Docker 鏡像創(chuàng)建
- Docker 容器初探
- 制作鏡像
- 上傳鏡像
- Dockerfile
Docker 安裝
Docker 鏡像創(chuàng)建
本段會有一些Docker術語,不明白沒關系,往下看,看完上手操作一遍就理解了
我將會運行一個Nodejs程序,不了解Nodejs程序也沒關系,Nodejs換成java或者php
-
首先我們下載一個ubuntu鏡像.
為什么要用ubuntu鏡像?
答: 因為所有鏡像都是基于linux kernel(如果有誤請指正),而ubuntu比較流行,所以這里采用ubuntu鏡像。
docker pull ubuntu:16.04
(部分童鞋可能得加 sudo docker pull ubuntu:16.04 )
(用過git的童鞋應該比較熟悉,其實Docker命令和git差不多)其中,
:16.04是ubuntu系統(tǒng)版本號,換成:14.04也是可以的git有git倉庫,那么,Docker也是有Docker倉庫的。默認Docker倉庫地址為:https://store.docker.com/ 所有的鏡像都是從這里拉取的
-
運行一個鏡像
docker run -i -t -p 3000:3000 ubuntu:16.04 /bin/bash
- -i 顯示info級別log信息
- -t 顯示控制臺
- -p 3000:3000 把容器(下面有解釋)的3000端口映射到本機3000端口
對于linux熟悉的童鞋看到這里應該很熟悉,這不就是linux的目錄結構嗎?
Docker 容器初探
查看剛才運行的鏡像,即,查看容器
docker ps -a

這里對于Docker的相關名詞(Docker,鏡像,容器)做一些解釋,因為后續(xù)會頻繁用到這些名詞
具體官方解釋請google或者查看官網解釋,這里做個類比大家應該就理解了。
- Docker可以認為是vmware或者virtualbox
- 鏡像可以認為是 xxx.iso
- 容器可以認為是 virtualbox運行xxx.iso后的系統(tǒng)

如上圖,有兩個容器,從STATUS可知,第一個容器已經退出,第二個容器正在運行。
現在我們進入第一個容器。
docker start ae9b89d01cac
docker attach ae9b89d01cac

既然前面說了,容器可以認為是虛擬機運行后的系統(tǒng),那么咱們運行的是ubuntu,那么咱們就
apt-get update 試一下
完全沒問題。
眼尖的童鞋應該發(fā)現了,apt-get update沒有加sudo,這是因為容器內默認root權限(其實是偽root權限)
那么想要在這個容器內運行NodeJS服務,就需要安裝NodeJS環(huán)境,以及安裝git把代碼pull下來,當然Java和PHP童鞋可以安裝java和php環(huán)境。
- 下載git:
apt-get install git - 下載curl:
apt-get install curl - 安裝Node:
curl -sL https://deb.nodesource.com/setup_4.x | bash - - 下載源碼:
git pull https://git.oschina.net/ryzecode/Docker_Nodejs_Test.git - 運行程序
node bin/www
此時瀏覽器運行http://127.0.0.1:3000 應該就可以訪問運行的node項目了
制作鏡像
那么,我們怎么在其他地方使用剛才的容器呢?
同理為,virtualbox運行了xxx.iso,然后我們修改了一些內容,那么,我們怎么把修改后的系統(tǒng)給別人用呢?
那就是把修改后的系統(tǒng)再打為iso就可以了。即,把容器再打為鏡像即可。
做法如下:
- 退出容器
- 查看容器
docker ps -a - 把容器打成鏡像
sudo docker commit a6c28e3f1ec4 ryzebo/docker-nodejs-test:0.1
- a6c28e3f1ec4 是容器的id
- ryzebo 是你注冊的https://store.docker.com/的名字,如果你沒有的話,那需要先注冊
- docker-nodejs-test 是你為該鏡像起的名字
- :0.1 是鏡像的版本號,默認是latest版本
- 查看鏡像
docker images
上傳鏡像
那么鏡像想要被別人使用,就要上傳到鏡像管理平臺,即https://store.docker.com/,就像代碼要放到github一樣
下面是上傳步驟:
- 登錄
docker login
- 上傳
docker push ryzebo/docker-nodejs-test:0.1
此時在https://store.docker.com/搜索ryzebo/docker-nodejs-test(搜索你自己的哦),就會看到你剛剛上傳的鏡像了
再次使用該鏡像就可以直接docker pull ryzebo/docker-nodejs-test:0.1 來使用了
如果初始鏡像不用ubuntu而用node鏡像的話,那么就不需要在容器內進行下載git,下載curl,安裝node了。
怎么樣?是不是很簡單?
這時候是不是有疑問,Docker這不也挺麻煩的嗎?
恩,這樣用確實麻煩,不過,以上內容只是為了讓大家理解Docker。真實生產環(huán)境將會使用Dockerfile。
Dockerfile
Dockerfile類似于makefile。這樣說大家是不是就理解了。
使用如下:
- 編寫Dockerfile文件
FROM node
# 基于node鏡像 ,如果基于剛才的鏡像則 FROM ryzebo/docker-nodejs-test:0.1
MAINTAINER Ryze <hz.bgning@gmail.com>
# 作者信息
RUN git clone https://git.oschina.net/ryzecode/Docker_Nodejs_Test.git \
&& cd ./Docker_Nodejs_Test \
&& npm install .
# RUN 命令的內容大家應該看得懂
WORKDIR ./Docker_Nodejs_Test
# 設定初始目錄
EXPOSE 3000
# 暴露3000端口
CMD ["node","bin/www"]
# 運行 node bin/www命令
注意,文件名就叫Dockerfile,內容就是以上內容,放到一個空文件夾中

然后build該Dockerfile為一個鏡像
docker build --rm --no-cache=true -t docker-node-test .
- -t 設定鏡像名字 docker-node-test
- --rm 如果已存在docker-node-test鏡像,則刪除docker-node-test鏡像
- --no-cache=true build時,禁止緩存

查看鏡像docker images

運行該鏡像docker run -p 3000:3000 -d docker-node-test

此時訪問http://127.0.0.1:3000/即可
本指南講解了部分Docker指令和部分Dockerfile指令
- Docker其它指令可以去官網查看,也可以看我另一篇文章《Docker常用命令》,里面總結出一些Docker常用指令
- Dockerfile其它指令可以在官網查看https://docs.docker.com/engine/reference/builder/
- 也可以看我實際應用Docker文章一步一步打造jenkins+docker+nodejs項目的自動部署環(huán)境 , 加深對Docker的理解
指南結束!
另:
有不理解的地方,可以郵件我:hz.bgning@gmail.com





