DOCKER安裝及基本使用

1 DOCKER 基本結構php

DOCKER安裝及基本使用

Docker客戶端:Docker是C/S的應用架構模型,通常客戶端和服務端都在同一個二進制文件中。因此一般咱們均可以經過Docker命令來運行相關操做。node

可是也能夠經過用於程序基於API來操做。python

Docker daemon:Docker 的服務端,一般表示的包都是Docker Engine,接受用戶請求,並進行相關操做。mysql

容器:至關於虛擬機的概念,可是簡化成一個相互隔離的操做系統,無需咱們關係具體細節,咱們像集裝箱同樣打包就用便可。nginx

鏡像:容器的基礎,經過Unionfs文件系統特性,實現不一樣鏡像堆疊。是啓動容器的一個基礎。用Dockerfile能夠方便定製。git

Registry:存放鏡像的地方,經過Registry咱們就能夠實現容器鏡像的打包帶走。github

2 DOCKER 經常使用命令
2.1 Docker 鏡像管理
1、顯示本地鏡像:web

[root@test mnt]# docker imagessql

REPOSITORY TAG IMAGE ID CREATED SIZEdocker

upstram_nginx latest f3c5dcc79825 9 days ago 669 MB

lnmp/nginx 0.2 9fe8cdcb3e43 9 days ago 669 MB

lnmp/mysql 1.0 2c612a810853 10 days ago 374 MB

lnmp/php 1.0 fc59ef00ea8a 10 days ago 1.23 GB

2、鏡像查找:

[root@test mnt]# docker search nginx

NAME DESCRIPTION STARS OFFICIAL AUTOMATED

nginx Official build of Nginx. 5508 [OK]

jwilder/nginx-proxy Automated Nginx reverse... 961 [OK]

richarvey/nginx-php-fpm Container running Nginx 354 [OK]

million12/nginx-php Nginx + PHP-FPM 5.5, 5.6,. 76 [OK]

3、鏡像刪除:

docker rmi image id (當容器存在的時候刪不掉,應該先刪除鏡像再刪除容器)

4、鏡像拉取和推送

Docker pull 便可

5、查看鏡像的具體信息:

[root@test mnt]# docker inspect f3c5dcc79825 ##能夠看到相關具體配置,和鏡像分層。

2.2 Docker 容器管理
1、建立容器:

docker create nginx(鏡像名)

2、查看運行容器:

[root@node3 ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

3、查看全部容器:

docker ps -a (顯示全部的容器,包括未運行的)

4、啓動容器

docker start nginx(容器名/id) 啓動容器

5、運行容器:

[root@test mnt]# docker run -d --name web(容器別名) nginx(鏡像名)

6、刪除容器:

[root@test mnt]# docker rm -f web(容器名/id) -f 強制刪除

7、進入容器:

[root@test mnt]# docker exec -it nginx(容器名/id) /bin/bash

2.3 Docker Volume
Docker Volume(卷)的概念,簡單來講,Volume就是目錄或者文件,它能夠繞過容器系統,而以正常的文件或者目錄的形式存在於宿主機上。適用於容器外持久化存儲文件,或共享文件。掛載文件/目錄到容器:

docker run -itd -v /opt/webapps(本地文件或目錄):/opt/apache-tomcat-7.0.55/webapps(容器內文件或目錄) -p 80:8080 --name tomcat icfw/tomcat:1.0

注:默認文件可讀可寫,指定掛載權限可自行參考docker手冊。

3 DOCKER 快速安裝
3.1 軟件版本
操做系統:Centos 7.0

3.2 開始安裝
http://www.daocloud.io/

因爲國內的源比較卡,因此咱們推薦使用daocloud的方式,調用遠程腳本,安裝便可:

[root@test ~]# curl -sSL https://get.daocloud.io/docker | sh

#爲了快速拉取鏡像,還要daocloud.由於在國內一般拉取Docker hub的鏡像都是被牆的。

[root@test ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://681a96df.m.daocloud.io

docker version >= 1.12

{"registry-mirrors": ["http://681a96df.m.daocloud.io"],

"live-restore": true

}

Success.

You need to restart docker to take effect: sudo systemctl restart docker

##其實是相關配置寫入/etc/docker/daemon.json:指定去這個倉庫下,由於默認是去官方的Docker hub下載鏡像的。

[root@test ~]# cat /etc/docker/daemon.json

{"registry-mirrors": ["http://681a96df.m.daocloud.io"],

"live-restore": true

}

##編輯配置文件(/usr/lib/systemd/system/docker.service),容許使用docker 客戶端遠程鏈接。

ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

而後重啓docker:

systemctl restart docker

##查看docker狀態,docker 讀取的是哪一個配置文件:

[root@test ~]# systemctl status docker

docker.service - Docker Application Container Engine

Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)

Active: active (running) since Sat 2017-03-11 16:43:51 CST; 1min 11s ago

Docs: https://docs.docker.com

###這裏咱們知道centos讀取的是/usr/lib/systemd/system/docker.service這個文件

3、測試docker是否啓動正常:

[root@master ~]# docker -H 127.0.0.1:2375 images

4 DOCKER 鏡像製做
4.1 DOCKER FILE 指令
DOCKER提倡使用Dockfile的方式來構建鏡像,Dockerfile是Docker的解釋型語言,經過提交Dockerfile來實現對鏡像的構建。

Dockerfile忽略大小寫,註釋用#開頭,

FROM指令:

FROM centos:centos7

##表示基礎鏡像來自哪裏,本地鏡像沒有就從倉庫獲取,指令必須放在最前面第一條。

MAINTAINER(用來指定鏡像建立者信息)

MAINTAINER admin admin@icfw.com.cn

##鏡像構建做者的相關信息

RUN(執行相關的系統命令)

格式:RUN <command> 或者 RUN ["executable","param1","param2"]

RUN yum install supervisor –y

CMD(系統啓動時候執行指令,可是會被第一條啓動所覆蓋)

CMD ["executable","param1","param2"] 使用 exec 執行,推薦方式;

CMD command param1 param2 在 /bin/sh 中執行,提供給須要交互的應用;

CMD ["param1","param2"] 提供給ENTRYPOINT的默認參數;

##CMD指定容器啓動是執行的命令,每一個Dockerfile只能有一條CMD命令,若是指定了多條,只有最後一條會被執行。若是你在啓動容器的時候也指定的命令,那麼會覆蓋Dockerfile構建的鏡像裏面的CMD命令。

ENTRYPOINT(也是系統啓動執行命令)

格式:

ENTRYPOINT ["executable", "param1","param2"]

ENTRYPOINT command param1 param2(shell中執行)。

##和CMD同樣也是最後一條命令執行,可是和CMD不一樣的是,CMD命令會被docker run 中執行的命令所覆蓋,固然二者能夠結合:

ENTRYPOINT ["python", "/test.py"]

CMD ["sleep", "10"]

##在啓動的時候等於就執行了,python /test.py sleep 10

##注意

當獨自使用時,若是你還使用了CMD命令且CMD是一個完整的可執行的命令,那麼CMD指令和ENTRYPOINT會互相覆蓋只有最後一個CMD或者ENTRYPOINT有效。

EXPOSE(指定容器須要映射到宿主機器的端口)

EXPOSE <port> [<port>...]

##在編寫Docker的時候暴露容器的端口,可是隻是在內部暴露,外部想映射還須要-p選項

VOLUME(指定掛載點))

VOLUME ["<mountpoint>"]

##是文件能夠持久化存在,或者在容器之間共享數據。

ENV(用於設置環境變量)

ENV <key> <value>

##構建鏡像和容器啓動時候均可以使用

ADD與COPY

ADD <src> <dest>

##兩個都是複製本機文件到鏡像裏,區別是ADD若是文件是可識別的壓縮格式,則docker會幫忙解壓縮.

WORKDIR

WORKDIR /path/to/workdir

##切換當前工做目錄,寫建議寫絕對路徑,寫相對路徑會疊加。

十一、ONBUILD(在子鏡像中執行)

ONBUILD <Dockerfile關鍵字>

##ONBUILD 指定的命令在構建鏡像時並不執行,而是在它的子鏡像中執行。

USER(設置container容器的用戶)

User nginx

##容器執行時候指定的用戶,默認是root:

arg

格式:ARG<name>[=<default value>]

##解釋:ARG指定了一個變量在docker build的時候使用,可使用--build-arg <varname>=<value>來指定參數的值,不過若是構建的時候不指定就會報錯。

4.2 構建一個tomcat鏡像示例
1、建立目錄新建Dockerfile和相關包:

[root@docker-registry images]# tree tomcat/

tomcat/

├── apache-tomcat-7.0.55.tar.gz

├── Centos-7.repo

├── Dockerfile

├── epel-7.repo

├── jdk1.8.0_181.tar.gz

├── server.xml

└── supervisord.conf

2、編寫Dockerfile:

[root@docker-registry tomcat]# cat Dockerfile

#pull down centos image

FROM centos:centos7

MAINTAINER chenjixiong@icfw.com.cn

ADD epel-7.repo /etc/yum.repos.d/

ADD Centos-7.repo /etc/yum.repos.d/

RUN yum install -y net-tools

RUN yum install -y iputils

RUN yum install -y supervisor

RUN mkdir -p /var/log/supervisor

ADD ./apache-tomcat-7.0.55.tar.gz /opt

ADD ./server.xml /opt/apache-tomcat-7.0.55/conf

ADD ./jdk1.8.0_181.tar.gz /opt

#set environment variable

ENV JAVA_HOME /opt/jdk1.8.0_181

ENV PATH $JAVA_HOME/bin:$PATH

ENV CATALINA_HOME /opt/apache-tomcat-7.0.55

ENV PATH $PATH:$CATALINA_HOME/bin

EXPOSE 8080

COPY supervisord.conf /etc/supervisor/supervisord.conf

CMD supervisord -c /etc/supervisor/supervisord.conf

三、用supervisor來管理進程:

[root@docker-registry tomcat]# cat supervisord.conf

[supervisord]

nodaemon=true

[program:tomcat]

command=/opt/apache-tomcat-7.0.55/bin/catalina.sh run

四、開始構建:

[root@docker-registry tomcat]# docker build -t icfw/tomcat:1.0 .

五、運行:

[root@node3 tomcat]# docker run -dit -p 8080:8080 --name tomcat i/tomcat:1.0

c29c5aaf63a73126e6976c02b1c9bd06e0a0af6514d9c697e1128ddb3a27

[root@docker-registry tomcat]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

fdc4e4f09938 icfw/tomcat:1.0 "/bin/sh -c 'supervi…" 33 seconds ago Up 32 seconds 0.0.0.0:8080->8080/tcp tomcat

六、訪問一下

IP:8080便可。

5 DOCKER 私有倉庫搭建
5.1 下載鏡像倉庫
[root@docker-registry test]# docker pull registry

5.2 啓動而且掛載鏡像倉庫到本地磁盤
[root@docker-registry test]# docker run -d -p 5000:5000 --restart=always -v /registry:/var/lib/registry registry

5.3 上傳鏡像
一、 配置鏡像註冊地址並重啓docker服務:

[root@docker-registry ~]# vi /etc/docker/daemon.json

{"registry-mirrors": ["http://681a96df.m.daocloud.io"],"insecure-registries":["http://192.168.20.20:5000"]}

二、 本地鏡像打個標籤而後上傳:

[root@docker-registry test]# [root@docker-registry test]# docker tag icfw/tomcat:1.0 192.168.20.20:5000/icfw/tomcat:1.0

#192.168.20.20:5000表示倉庫地址,icfw/tomcat表示鏡像名稱,1.0表示版本號。

三、 直接上傳:

[root@docker-registry test]# docker push 192.168.20.20:5000/icfw/tomcat:1.0

四、 上傳完成,咱們能夠查看一下掛載目錄是否有鏡像:

[root@docker-registry test]# ls /registry/

dockerDocker

五、 關於本地鏡像的查看:

[root@docker-registry test]# curl http://192.168.20.20:5000/v2/_catalog

{"repositories":["icfw/tomcat"]}

六、 看到有兩個鏡像,咱們要獲取他的標籤信息以便下載呢:

[root@docker-registry test]# curl http://192.168.20.20:5000/v2/icfw/tomcat/tags/list

{"name":"icfw/tomcat","tags":["1.0"]}

七、 而後咱們直接下載鏡像:

[root@docker-registry test]# docker pull 192.168.20.20:5000/icfw/tomcat:1.0

6 使用Docker compose容器編排
Docker Compose是一個用來定義和運行復雜應用的Docker工具。使用Compose,你能夠在一個文件中定義一個多容器應用,而後使用一條命令來啓動你的應用,完成一切準備工做。

經過compose構建相關容器編排很是簡單,能夠參考官方:

https://docs.docker.com/compose/gettingstarted/#step-4-build-and-run-your-app-with-compose

6.1 compose安裝:
[root@dev-app-server ~]# sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

[root@dev-app-server ~]# chmod +x /usr/local/bin/docker-compose

docker-compose version 1.23.2, build 1110ad01

docker-py version: 3.6.0

CPython version: 3.6.7

OpenSSL version: OpenSSL 1.1.0f 25 May 2017

相關語法:

build 構建或重建服務

help 命令幫助

kill 殺掉容器

logs 顯示容器的輸出內容

port 打印綁定的開放端口

ps 顯示容器

pull 拉取服務鏡像

restart 重啓服務

rm 刪除中止的容器

run 運行一個一次性命令

scale 設置服務的容器數目

start 開啓服務

stop 中止服務

up 建立並啓動容器

6.2 compose的構建語法
docker compose構建語法和相關格式很是簡單,與docker相關命令差很少,咱們直接進入實戰部分,構建安全碼系統測試環境:

##image和build必須存在一個,爲了節約時間,咱們沒有用dockerfile構建一個鏡像,剩下的指令基本上和docker run同樣的因此這裏很少介紹。

6.3 開始構建和啓動
一、配置文件

[root@dev-app-server vcs-project]# cat docker-compose.yml

version: "2"

services:

framework:

image:  192.168.20.20:5000/icfw/tomcat:1.0

ports:

  - 8080:8080

environment:

   ICFW_FRMEWORK_HOME: /opt/env

volumes:

  - /opt/vcs-project/framework:/opt/apache-tomcat-7.0.55/webapps

  - /opt/vcs-project/env/icfw-framework:/opt/env

  - /opt/vcs-project/icfwfiles:/opt/icfwfiles

vcs:

image:  192.168.20.20:5000/icfw/tomcat:1.0

ports:

  - 8081:8080

environment:

   VCS_HOME: /opt/env

volumes:

  - /opt/vcs-project/vcs:/opt/apache-tomcat-7.0.55/webapps

  - /opt/vcs-project/env/vcs-home:/opt/env

  - /opt/vcs-project/icfwfiles:/opt/icfwfiles

links:

  - framework

二、建立並啓動

[root@dev-app-server vcs-project]# docker-compose -f docker-compose.yml up -d

Creating vcs-project_framework_1 ... done

Creating vcs-project_vcs_1 ... done

三、刪除指定容器:先中止容器,再執行刪除:

docker-compose -f docker-compose.yml stop vcs

docker-compose -f docker-compose.yml rm vcs ##便可。

6.4 查看日誌
一、 查看啓動日誌

[root@dev-app-server vcs-project]# docker-compose -f docker-compose.yml logs

二、 查看相關狀態:

[root@dev-app-server vcs-project]# docker-compose -f docker-compose.yml ps

Name                        Command               State           Ports

vcs-project_framework_1 /bin/sh -c supervisord -c ... Up 0.0.0.0:8080->8080/tcp

vcs-project_vcs_1 /bin/sh -c supervisord -c ... Up 0.0.0.0:8081->8080/tcp

6.5 訪問測試

一、映射web目錄已經添加了framework-web.war,vcs-web.war了,可經過http://192.168.20.15:8080/frmamework-web訪問測試。

相關文章
相關標籤/搜索