docker及docker-compose學習

一  docker簡介css

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

docker架構java

    Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和建立Docker容器。Docker 容器經過 Docker 鏡像來建立。mysql

容器與鏡像的關係相似於面向對象編程中的對象與類。nginx

基礎構件c++

Docker 鏡像(Images)git

Docker 鏡像是用於建立 Docker 容器的模板。github

Docker 容器(Container)web

容器是獨立運行的一個或一組應用。redis

Docker 客戶端(Client)

Docker 客戶端經過命令行或者其餘工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 與 Docker 的守護進程通訊。

Docker 主機(Host)

一個物理或者虛擬的機器用於執行 Docker 守護進程和容器。

Docker 倉庫(Registry)

Docker 倉庫用來保存鏡像,能夠理解爲代碼控制中的代碼倉庫。

Docker Hub(https://hub.docker.com) 提供了龐大的鏡像集合供使用。

 

Docker Machine

Docker Machine是一個簡化Docker安裝的命令行工具,經過一個簡單的命令行便可在相應的平臺上安裝Docker,好比VirtualBox、 Digital Ocean、Microsoft Azure。

 

docker安裝

centos7下

先安裝依賴

 yum install -y yum-utils device-mapper-persistent-data lvm2  再安裝  yum -y install docker-ce

啓動   systemctl start docker

經常使用命令總結

  docker  search  查找位於dockerhub的鏡像 

如 docker search java

 

docker pull  下載鏡像

如 docker pull java

docker images  列出鏡像

docker rmi 即刪除鏡像

如 docker rmi java

docker  save  即保存鏡像

如 docker save java >java.tar

docker  load 即 加載鏡像

如 docker load <java.tar

另外 docker還能夠經過dokcerfile建立鏡像

命令格式 dokcer build  [OPTION] PATH |URL| -

示例先下載基礎 centos鏡像

docker pull centos

編寫nginx dockerfile

cat Dockerfile 
# base image
FROM centos
# MAINTAINER
MAINTAINER json_hc@163.com
# put nginx-1.12.2.tar.gz into /usr/local/src and unpack nginx
ADD nginx-1.12.2.tar.gz /usr/local/src
# running required command
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel 
RUN yum install -y libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel
RUN useradd -M -s /sbin/nologin nginx
# change dir to /usr/local/src/nginx-1.12.2
WORKDIR /usr/local/src/nginx-1.12.2
# execute command to compile nginx
RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio  --with-http_ssl_module  --with-http_realip_module    --with-http_addition_module    --with-http_xslt_module   --with-http_image_filter_module    --with-http_geoip_module  --with-http_sub_module  --with-http_dav_module --with-http_flv_module    --with-http_mp4_module --with-http_gunzip_module  --with-http_gzip_static_module  --with-http_auth_request_module  --with-http_random_index_module   --with-http_secure_link_module   --with-http_degradation_module   --with-http_stub_status_module && make && make install
EXPOSE 80

  下載nginx源碼 到當前路徑

執行構建 docker build -t centos_nginx:v1 .

docker images 查看

docker容器經常使用命令

啓動容器

如 1 docker run java /bin/echo 'hello world'

    2 docker run -d -p 91:80 nginx  啓動一個nginx 容器 並映射了91端口能夠訪問。

列出容器

docker ps 

中止容器 

docker stop ${容器id} -t (等待時間)

docker kill   ${容器id} 強制關閉

啓動已中止的容器

docker start  ${容器id}

重啓  docker restart  ${容器id}

進入容器

docker attach   ${容器id}

或者 

docker exec -it  ${容器id} /bin/bash

刪除容器

docker rm ${容器id}

刪除全部容器

docker rm -f $(docker ps -a -q )謹慎使用

導出容器

docker export  nginx-test >nginx-test.tar

導入容器

docker import nginx-test.tar nginx-test2

 

二 docker-compose簡介

   Compose 是一個用戶定義和運行多個容器的 Docker 應用程序。在 Compose 中你能夠使用 YAML 文件來配置你的應用服務。而後,只須要一個簡單的命令,就能夠建立並啓動你配置的全部服務。

安裝docker-compose

  curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

  chmod +x /usr/local/bin/docker-compose

[root@localhost ~]# docker-compose --version
docker-compose version 1.16.1, build 6d1ac21

使用流程

   a 在 Dockfile 中定義你的應用環境,使其能夠在任何地方複製。

   b  在 docker-compose.yml 中定義組成應用程序的服務,以便它們能夠在隔離的環境中一塊兒運行。

   c  最後,運行dcoker-compose up,Compose 將啓動並運行整個應用程序

示例

準備工做:提早下載好鏡像:

docker pull mysql docker pull wordpress

須要新建一個空白目錄,例如wptest。新建一個docker-compose.yml

 

version: '2'
services:
    web: 
      image: wordpress:latest 
      links: 
        - db
      ports: 
        - "8002:80"
      environment:
        WORDPRESS_DB_HOST: db:3306
        WORDPRESS_DB_PASSWORD: 123456
    db: 
      image: mysql 
      environment: 
        - MYSQL_ROOT_PASSWORD=123456

 

  

 

 

以上命令的意思是新建db和wordpress容器。等同於:

$ docker run --name db -e MYSQL_ROOT_PASSWORD=123456 -d mysql $ docker run --name some-wordpress --link db:mysql -p 8002:80 -d wordpress

注意,若是你是直接從fig遷移過來的,且weblinks- db:mysql,這裏會提示沒有給wordpress設置環境變量,這裏須要添加環境變量WORDPRESS_DB_HOSTWORDPRESS_DB_PASSWORD

好,咱們啓動應用:

# docker-compose up Creating wptest_db_1... Creating wptest_wordpress_1... Attaching to wptest_db_1, wptest_wordpress_1 wordpress_1 | Complete! WordPress has been successfully copied to /var/www/html

就成功了。瀏覽器訪問 http://192.168.1.115:8002 。

默認是前臺運行並打印日誌到控制檯。若是想後臺運行,能夠:

docker-compose up -d

服務後臺後,能夠使用下列命令查看狀態:

# docker-compose ps Name Command State Ports ----------------------------------------------------------------------------------- figtest_db_1 docker-entrypoint.sh mysqld Up 3306/tcp figtest_wordpress_1 docker-entrypoint.sh apach ... Up 0.0.0.0:8002->80/tcp # docker-compose logs Attaching to wptest_wordpress_1, wptest_db_1 db_1 | 2016-10-14T14:38:46.498030Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). db_1 | 2016-10-14T14:38:46.499974Z 0 [Note] mysqld (mysqld 5.7.15) starting as process 1 ... db_1 | 2016-10-14T14:38:46.727191Z 0 [Note] InnoDB: PUNCH HOLE support available 

中止服務:

# docker-compose stop Stopping wptest_wordpress_1... Stopping wptest_db_1...

從新啓動服務:

docker-compose restart

docker-compose.yml參考

每一個docker-compose.yml必須定義image或者build中的一個,其它的是可選的。

image

指定鏡像tag或者ID。示例:

image: redis image: ubuntu:14.04 image: tutum/influxdb image: example-registry.com:4000/postgresql image: a4bc65fd

注意,在version 1裏同時使用imagebuild是不容許的,version 2則能夠,若是同時指定了二者,會將build出來的鏡像打上名爲image標籤。

build

用來指定一個包含Dockerfile文件的路徑。通常是當前目錄.。Fig將build並生成一個隨機命名的鏡像。

注意,在version 1bulid僅支持值爲字符串。version 2裏支持對象格式。

build: ./dir build: context: ./dir dockerfile: Dockerfile-alternate args: buildno: 1

context爲路徑,dockerfile爲須要替換默認docker-compose的文件名,args爲構建(build)過程當中的環境變量,用於替換Dockerfile裏定義的ARG參數,容器中不可用。示例:
Dockerfile:

ARG buildno ARG password RUN echo "Build number: $buildno" RUN script-requiring-password.sh "$password"

docker-compose.yml:

build:  context: .  args:  buildno: 1  password: secret build:  context: .  args:  - buildno=1  - password=secret

command

用來覆蓋缺省命令。示例:

command: bundle exec thin -p 3000

command也支持數組形式:

command: [bundle, exec, thin, -p, 3000]

links

用於連接另外一容器服務,如須要使用到另外一容器的mysql服務。能夠給出服務名和別名;也能夠僅給出服務名,這樣別名將和服務名相同。同docker run --link。示例:

links: - db - db:mysql - redis

使用了別名將自動會在容器的/etc/hosts文件裏建立相應記錄:

172.17.2.186 db 172.17.2.186 mysql 172.17.2.187 redis

因此咱們在容器裏就能夠直接使用別名做爲服務的主機名。

ports

用於暴露端口。同docker run -p。示例:

ports: - "3000" - "8000:8000" - "49100:22" - "127.0.0.1:8001:8001"

expose

expose提供container之間的端口訪問,不會暴露給主機使用。同docker run --expose

expose: - "3000" - "8000"

volumes

掛載數據卷。同docker run -v。示例:

volumes: - /var/lib/mysql - cache/:/tmp/cache - ~/configs:/etc/configs/:ro

volumes_from

掛載數據卷容器,掛載是容器。同docker run --volumes-from。示例:

volumes_from: - service_name - service_name:ro - container:container_name - container:container_name:rw

container:container_name格式僅支持version 2

environment

添加環境變量。同docker run -e。能夠是數組或者字典格式:

environment:  RACK_ENV: development  SESSION_SECRET: environment:  - RACK_ENV=development  - SESSION_SECRET

depends_on

用於指定服務依賴,通常是mysql、redis等。
指定了依賴,將會優先於服務建立並啓動依賴。

links也能夠指定依賴。

external_links

連接搭配docker-compose.yml文件或者Compose以外定義的服務,一般是提供共享或公共服務。格式與links類似:

external_links: - redis_1 - project_db_1:mysql - project_db_1:postgresql

注意,external_links連接的服務與當前服務必須是同一個網絡環境。

extra_hosts

添加主機名映射。

extra_hosts: - "somehost:162.242.195.82" - "otherhost:50.31.209.229"

將會在/etc/hosts建立記錄:

162.242.195.82 somehost 50.31.209.229 otherhost

extends

繼承自當前yml文件或者其它文件中定義的服務,能夠選擇性的覆蓋原有配置。

extends: file: common.yml service: webapp

service必須有,file可選。service是須要繼承的服務,例如webdatabase

net

設置網絡模式。同docker的--net參數。

net: "bridge" net: "none" net: "container:[name or id]" net: "host"

dns

自定義dns服務器。

dns: 8.8.8.8 dns: - 8.8.8.8 - 9.9.9.9

cpu_shares, cpu_quota, cpuset, domainname, hostname, ipc, mac_address, mem_limit, memswap_limit, privileged, read_only, restart, shm_size, stdin_open, tty, user, working_dir

 

cpu_shares: 73 cpu_quota: 50000 cpuset: 0,1 user: postgresql working_dir: /code domainname: foo.com hostname: foo ipc: host mac_address: 02:42:ac:11:65:43 mem_limit: 1000000000 mem_limit: 128M memswap_limit: 2000000000 privileged: true restart: always read_only: true shm_size: 64M stdin_open: true tty: true

命令行參考

$ docker-compose Define and run multi-container applications with Docker. Usage: docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...] docker-compose -h|--help Options: -f, --file FILE Specify an alternate compose file (default: docker-compose.yml) -p, --project-name NAME Specify an alternate project name (default: directory name) --verbose Show more output -v, --version Print version and exit -H, --host HOST Daemon socket to connect to --tls Use TLS; implied by --tlsverify --tlscacert CA_PATH Trust certs signed only by this CA --tlscert CLIENT_CERT_PATH Path to TLS certificate file --tlskey TLS_KEY_PATH Path to TLS key file --tlsverify Use TLS and verify the remote --skip-hostname-check Don't check the daemon's hostname against the name specified in the client certificate (for example if your docker host is an IP address) Commands: build Build or rebuild services bundle Generate a Docker bundle from the Compose file config Validate and view the compose file create Create services down Stop and remove containers, networks, images, and volumes events Receive real time events from containers exec Execute a command in a running container help Get help on a command kill Kill containers logs View output from containers pause Pause services port Print the public port for a port binding ps List containers pull Pulls service images push Push service images restart Restart services rm Remove stopped containers run Run a one-off command scale Set number of containers for a service start Start services stop Stop services unpause Unpause services up Create and start containers version Show the Docker-Compose version information
相關文章
相關標籤/搜索