慕課網_《Docker入門》學習總結

時間:2017年09月16日星期六
說明:本文部份內容均來自慕課網。@慕課網:http://www.imooc.com
教學源碼:無
學習源碼:無html

第一章:課程簡介

1-1 課程介紹

Docker入門教程node

Docker簡介:什麼是Docker
鏡像與容器
容器存儲
Registry
多容器app

面向用戶mysql

對docker感興趣的開發、測試、運維

預備知識linux

linux命令行
bash shell腳本

1-2 Docker介紹

什麼是Dockernginx

Docker 是一個開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,
而後發佈到任何流行的 Linux 機器上,也能夠實現虛擬化。
容器是徹底使用沙箱機制,相互之間不會有任何接口。

與現有技術進行類比git

能夠粗糙地理解爲輕量級的虛擬機
開掛的chroot(chroot:對應用程序做了文件系統的分離)

Docker與虛擬機github

clipboard.png

1-3 Mac安裝

學習筆記sql

進入docker官網:www.docker.com
下載docker安裝包:Docker.dmg

打開docker
open Docker.dmg
或雙擊Docker.dmg
將Docker拖到Applications裏面

驗證安裝
docker info

1-4 Linux安裝

學習筆記docker

安裝docker自己
sudo wget -qO- https://get.docker.com/ | sh
容許非root用戶運行docker
sudo usermod -aG docker zc
驗證安裝
docker info

1-5 Windows安裝

學習筆記shell

官網地址:https://www.docker.com/
下載安裝包:https://www.docker.com/docker-windows
執行安裝包:Docker for Windows Installer.exe

第二章:Docker架構

2-1 架構介紹

Docker架構

clipboard.png

clipboard.png

學習筆記

docker run ubuntu echo hello docker
 使用ubuntu鏡像,在裏面運行了echo hello docker這個命令,輸出就是hello docker
 
docker run nginx

docker images
查看本地鏡像

docker run -p 8080:80 -d daocloud.io/nginx
運行daocloud.io/nginx鏡像
-p 端口映射,將nginx的80端口映射到本地的8080端口
-d 使用守護進程啓動

docker ps
查看當前正在運行的容器


docker cp index.html 容器ID:容器內部文件路徑
docker cp index.html 17asdasdasa://usr/share/nginx/html
將index.html文件拷貝到容器ID爲17asdasdasa容器內部,路徑爲//usr/share/nginx/html

docker stop 容器ID
中止指定容器

docker commit -m 'fun' 容器ID nginx-fun
保存容器爲鏡像,鏡像名爲nginx-fun

docker rmi 鏡像ID
刪除指定鏡像

docker ps -a
查看全部容器(正在運行和中止運行)

docker rm 容器ID
刪除指定容器

docker pull
獲取鏡像

docker build
建立鏡像

docker images
列出鏡像

docker run
運行鏡像爲容器

docker ps
列出正在運行的容器

docker rm
刪除容器

docker rmi
刪除鏡像

docker cp
在主機和容器之間拷貝文件

docker commit
保存改動後的容器爲新的image

第三章:Dockerfile

3-1 Dockerfile介紹

學習筆記

第一個Dockerfile

FROM alpine:latest
MAINTAINER zc
CMD echo 'hello docker'

// 依賴於基礎鏡像alpine:latest
// 標識鏡像信息
// 須要運行的命令

touch Dockerfile
產生一個Dockerfile文件
vim Dockerfile
編輯Dockerfile文件

docker build -t hello_docker .
構建docker鏡像,-t參數指定鏡像名稱,最後面的點(.)表示構建鏡像文件的路徑

docker images
docker run hello_docker

3-2 Dockerfile實戰

學習筆記

第二個Dockerfile

FROM ubuntu
MAINTAINER zc
RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nginx
COPY index.html /var/www/html
ENTRYPOINT ["/usr/sbin/nginx","-g","deamon off;"]
EXPOSE 80

// 依賴於基礎鏡像ubuntu
// 標識鏡像信息
// 運行ubuntu命令,新增一個軟件倉庫鏡像地址
// 運行ubuntu命令,更新軟件
// 運行ubuntu命令,安裝nginx
// 拷貝本地文件到鏡像內部
// 在鏡像中默認啓動nginx服務
// 鏡像暴露服務的端口

mkdir dockerfile2
cd dockerfile2
touch Dockerfile
vim Dockerfile
touch index.html
vim index.html
今天是週末!

docker build -t zc/hello-nginx .

docker run -d -p 80:80 zc/hello-nginx

curl http://localhost
使用curl進行測試

Dockerfile語法

FROM:指明基礎鏡像名稱。必填
RUN:用於執行命令,當RUN執行完畢後,將產生一個新的文件層。可選
ADD:向鏡像添加新文件或者新目錄。可選
COPY:從主機向鏡像複製文件。可選
CMD:指定此鏡像啓動時默認執行命令。可選
EXPOSE:用於指定須要暴露的網絡端口號。可選
WORKDIR:設定此鏡像後續操做的默認工做目錄。可選
MAINTAINER:可用於提供做者、版本及氣他備註信息。可選
ENV:用於在鏡像中添加環境變量。可選
ENTRYPOINT:在鏡像中設定默認執行的二進制程序。可選
USER:在鏡像構建過程當中,生成或者切換到另外一個用戶。可選
VOLUME:向鏡像中掛載一個卷組。可選

3-3 鏡像分層

鏡像分層

Dockerfile中的每一行都產生一個新層
FROM alpine:latest        4dffsd5454wq
MAINTAINER zc        fbdfasdfasfd554
CMD echo 'hello docker'    3df545dfad4a

第四章:Docker存儲

4-1 Volume介紹

Volume

提供獨立於容器以外的持久化存儲

4-2 Volume操做

學習筆記

第一種形式

docker run -v 容器內部地址 鏡像名稱
docker run -d --name nginx -v /usr/share/nginx/html nginx
運行nginx容器,經過-v掛載一個卷組,經過-d後臺啓動,經過--name爲容器指定名稱

docker inspect 容器名稱
docker inspect nginx
查看指定容器全部信息

查看Mounts節點下的Sources節點和Destination節點信息
該容器把宿主機的Sources對應目錄掛載到容器內部的Destination的目錄地址

cd Sources對應的目錄路徑
vim index.html,修改index.html文件

docker exec -it 容器名稱 /bin/bash
進入到容器內部

cd Destination對應的路徑路徑
而後查看index.html文件,發現是剛剛修改後的內容,即掛載成功,映射關係正確

第二種形式

docker run -v $PWD/code:/var/www/html nginx
本地目錄掛載到容器裏面的一個路面裏面
docker run -p 80:80 -d -v $PWD/html:/usr/share/nginx/html nginx

cat html/index.html
查看本地文件的內容

docker exec -it 容器名稱 /bin/bash
進入到容器內部

cat /usr/share/nginx/html/index.html
發現其內容和本地文件的內容一致,即映射關係正確

第二種形式

docker run --volumes-from ...

mkdir data
docker create -v $PWD/data:/var/mydata --name data_container ubuntu
產生一個僅有數據的容器

docker run -it --volumes-from data_container ubuntu /bin/base
從另一個容器掛載, 運行並直接進入容器內部

mount
cd mydata
touch whatever.txt
exit

cd data
ls
查看本地data目錄下是否有whatever.txt文件
能夠多個容器掛載一個數據容器,實現數據共享

第五章:鏡像倉庫

5-1 Registry介紹

Docker相關術語

host:宿主機
image:鏡像
container:容器
registry:鏡像倉庫
daemon:守護程序
client:客戶端

Registry相關命令

docker search 鏡像名稱
從鏡像倉庫中搜索指定鏡像
docker pull 鏡像名稱
從鏡像倉庫中拉取指定鏡像
docker push 鏡像名稱
將本地鏡像推送到鏡像倉庫

國內的一些鏡像倉庫

daocloud
時速雲
阿里雲

5-2 Registry實戰

學習筆記

docker search whalesay
在鏡像倉庫中搜索whalesay

docker pull docker/whalesay
從鏡像倉庫中拉取鏡像docker/whalesay到本地

docker images
查看本地鏡像信息

docker run docker/whalesay cowsay Docker so fun
運行docker/whalesay鏡像,並指定參數

docker tag docker/whalesay zc/whalesay
依賴docker/whalesay鏡像產生新的zc/whalesay鏡像(相似複製)

docker push zc/whalesay
將鏡像zc/whalesay推送到鏡像倉庫

docker login
在push以前,須要登陸。默認登陸到docker hub

到docker hub官方地址
查看到本身push的鏡像

第六章:多容器app

6-1 Compose介紹

docker-compose

多容器app
docker-compose是獨立的軟件
docker-compose安裝
linux:curl https://github.com/docker/compose

6-2 Compose安裝

學習筆記

curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
下載docker-compose包到/usr/local/bin/docker-compose

chmod a+x /usr/local/bin/docker-compose
給/usr/local/bin/docker-compose授可執行權限

docker-compose --version
驗證安裝

6-3 Compose實戰

實戰案例介紹

app名稱:ghost,是一個博客平臺程序
安裝以後,可本身寫文章或別人發佈
架構:nginx-ghost app-mysql
分別分爲三個容器

docker-compose.yml文件

ghost-app: 
  build: ghost
  depends_on: 
    - db
  ports: 
    - "2368:2368"
nginx: 
  build: nginx
  ports: 
    - "80:80"
  depends_on: 
    - ghost-app
db: 
  images: "mysql:5.7.15"

docker-compose.yml命令

build:本地建立鏡像
command:覆蓋缺省命令
depends_on:鏈接容器
ports:暴露端口
volumes:掛載卷組
image:拉取鏡像

docker-compose命令

up:啓動服務
stop:中止服務
rm:刪除服務中的各個容器
logs:觀察各個容器中的日誌
ps:列出服務相關的容器

學習筆記

mkdir ghost
cd ghost

mkdir ghost
mkdir nginx
mkdir data

// ghost鏡像構建
cd ghost
touch Dockerfile
vim Dockerfile

FROM ghost
COPY ./config.js /var/lib/ghost/config.js
EXPOSE 2368
CMD ["npm","start","--production"]

// 依賴ghost官方鏡像
// 拷貝本地配置文件到鏡像中
// 聲明暴露服務的端口
// 執行啓動命令。ghost爲node.js程序,因此使用npm命令

touch config.js
vim config.js

var path = require('path'),
config;

config = {
    production: {
        url:'http://mytestblog.com',
        mail: {},
        database: {
            client: 'mysql',
            connection: {
                host: 'db',
                user: 'ghost',
                password: 'ghost',
                database: 'ghost',
                port: '3306',
                charset: 'utf8'
            },
            debug: false
        },
        paths: {
            contentPath: path.join(process.env.GHOST_CONTENT,'/')
        },
        server: {
            host: '0.0.0.0',
            port: '2368'
        }
    }
};

module.exports = config;

// nginx鏡像構建
cd nginx

touch Dockerfile
vim Dockerfile

FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80

// 依賴nginx官方鏡像
// 拷貝本地配置文件到鏡像中
// 聲明暴露服務的端口

touch nginx.conf
vim nginx.conf

worker processes 4;
events {worker_connections 1024;}
http {
    server {
        listen 80;
        location / {
            proxy_pass http://ghost-app:2368;
        }
    }
}

回到ghost根路徑
ls顯示
ghost:存放Dockerfile和配置文件用來構建鏡像
nginx:存放Dockerfile和配置文件用來構建鏡像
data:存放博客的數據

// compose文件用於描述整個系統的架構
touch docker-compose.yml
vim docker-compose.yml

version: '2'

networks: 
  ghost: 

service: 
  ghost-app: 
    build: ghost
    networks: ghost
    depends_on: db
    ports: "2368:2368"
  
  nginx: 
    build: nginx
    networks: ghost
    depends_on: ghost-app
    ports: "80:80"
  
  db: 
    image: "mysql:5.7.15"
    networks: ghost
    environment: 
      MYSQL_ROOT_PASSWORD: mysqlroot
      MYSQL_USER: ghost
      MYSQL_PASSWORD: ghost
    volumes: $PWD/data:/var/lib/mysql
    ports: "3306:3306"


docker-compose up -d
啓動
docker-compose stop
關閉
docker-compose rm
刪除

docker-compose build
構建


訪問http://localhost/ghost

第七章:課程總結

7-1 課程總結

課程總結

Docker介紹:容器、鏡像
如何製做鏡像
如何分享鏡像
如何持久化容器數據
如何編排一個多容器的應用
相關文章
相關標籤/搜索