Docker快速上手指南

寫作目的:

本人在學習 Docker 時也是看了官方Docs極客學院的教程,以及各種博客,可能本人愚鈍并未看太懂,后來上手操作后理解 Docker 。
所以這是一篇 個人認為 更快速讓大家能夠 使用 以及 理解 Docker 的指南。

所以

如果還不知道Docker是什么,那趕快去google一下吧。
如果不知道Docker能做什么,那繼續(xù)往下看。
以下是正文


此指南新手操作下來,大概需要20分鐘左右
老鳥5分鐘不到就完事

目錄

  1. Docker 安裝
  2. Docker 鏡像創(chuàng)建
  3. Docker 容器初探
  4. 制作鏡像
  5. 上傳鏡像
  6. Dockerfile

Docker 安裝

Docker 鏡像創(chuàng)建

本段會有一些Docker術語,不明白沒關系,往下看,看完上手操作一遍就理解了

我將會運行一個Nodejs程序,不了解Nodejs程序也沒關系,Nodejs換成java或者php

  1. 首先我們下載一個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/ 所有的鏡像都是從這里拉取的

  2. 運行一個鏡像

    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就可以了。即,把容器再打為鏡像即可。
做法如下:

  1. 退出容器
  2. 查看容器 docker ps -a
  3. 把容器打成鏡像sudo docker commit a6c28e3f1ec4 ryzebo/docker-nodejs-test:0.1
    • a6c28e3f1ec4 是容器的id
    • ryzebo 是你注冊的https://store.docker.com/的名字,如果你沒有的話,那需要先注冊
    • docker-nodejs-test 是你為該鏡像起的名字
    • :0.1 是鏡像的版本號,默認是latest版本
  4. 查看鏡像docker images

上傳鏡像

那么鏡像想要被別人使用,就要上傳到鏡像管理平臺,即https://store.docker.com/,就像代碼要放到github一樣

下面是上傳步驟:

  1. 登錄docker login
  2. 上傳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。這樣說大家是不是就理解了。

使用如下:

  1. 編寫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指令

  1. Docker其它指令可以去官網查看,也可以看我另一篇文章《Docker常用命令》,里面總結出一些Docker常用指令
  2. Dockerfile其它指令可以在官網查看https://docs.docker.com/engine/reference/builder/
  3. 也可以看我實際應用Docker文章一步一步打造jenkins+docker+nodejs項目的自動部署環(huán)境 , 加深對Docker的理解

指南結束!

另:
有不理解的地方,可以郵件我:hz.bgning@gmail.com

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Docker — 云時代的程序分發(fā)方式 要說最近一年云計算業(yè)界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,873評論 15 147
  • 轉載自 http://blog.opskumu.com/docker.html 一、Docker 簡介 Docke...
    極客圈閱讀 10,764評論 0 120
  • 五、Docker 端口映射 無論如何,這些 ip 是基于本地系統(tǒng)的并且容器的端口非本地主機是訪問不到的。此外,除了...
    R_X閱讀 1,971評論 0 7
  • 0. 前言 docker是什么?docker是用GO語言開發(fā)的應用容器引擎,基于容器化,沙箱機制的應用部署技術???..
    sessionboy閱讀 4,023評論 2 49
  • 我不算是一個明媚的人,喜愛在他人的故事里喜悅,在自個的故事里哀痛;也喜愛收集他人的情懷,開釋自個的感動;更喜愛拿他...
    nali35閱讀 282評論 0 0

友情鏈接更多精彩內容