docker容器管理

查詢容器信息

docker inspcet

查詢信息,包括運行狀況、存貯位置、配置參數、網絡設置等。mysql

  • 查詢容器的運行狀態
docker inspect -f {{.State.Status}} 【容器】
  • 查詢容器的IP
docker inspect  -f {{.NetworkSettings.IPAddress}} 【容器】

查詢容器日誌信息

docker logs 【容器】nginx

-f 實時打印最新的日誌git

docker stats 實時查看容器所佔的系統資源

如CPU使用率、內存、網絡、磁盤開銷github

容器內部命令

原生方式登入docker execredis

docker exec + 容器名 +容器內執行的命令

好比查詢容器php的全部進程:sql

docker exec php7-dev ps -ef

容器內連續執行多條命令,能夠加上 「-it」參數,至關於以root身份登入容器內,可連續執行命令,執行exit退出。docker

docker exec -it php7-dev /bin/bash

多容器管理

多個容器有數據交互,依賴,啓動方式就必須有前後,如:shell

# db容器優先於WordPress啓動
docker start db docker start WordPress

docker composer

容器編排工具,容許用戶在一個模版(YAML格式)中定義一組相關聯的應用容器,這組容器會根據配置模版中的「--link」等參數,對啓動的優先級自動排序,簡單執行一條「docker-composer up」,就能夠把同一服務中的多個容器依次建立和啓動。數組

安裝方式,參考官方

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
sudo chmod +x /usr/local/bin/docker-compose

#查看compose版本
docker-compose --version
#docker-compose version 1.23.1, build b02f1306

例如啓動wordpress項目,建立wordpress文件夾,文件夾內建立docker-composer.yml文件,內容:

wordpress:
    image: wordpress
    links:
        - db:mysql
    ports:
        - 8080:80
db:
    image: mariadb
    environment:
        MYSQL_ROOT_PASSWORD: example

選項 links、ports、environment、volumes分別對應 docker run中的"--links"(容器互聯)、"-p"(端口映射)、「-e」(環境變量設置)、「-v」(映射目錄)。
restart: always 一直在線

docker-compose up 建立和啓用服務 加-d後臺運行

docker-compose start 啓動

docker-compose stop 中止

docker-compose ps 查看運行狀況

其餘選項

  • environment
    加入環境變量,可使用數組或者字典,只有一個key的環境變量能夠在運行Compose的機器上找到對應的值,這有助於加密的或者特殊主機的值
environment:
  RACK_ENV: development
  SESSION_SECRET:
environments:
  - RACK_ENV=development
  - SESSION_SECRET
  • env_file
    從一個文件中加入環境變量,該文件能夠是一個單獨的值或者一張列表,在environment中指定的環境變量將會重寫這些值
env_file:
  - .env


RACK_ENV: development
  • 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

能夠看出docker-compose落地到具體的項目中,當具體的項目須要依賴的環境發生變化或者部署生產,能夠在這些項目根目錄中創建docker-compose.yml,解決如何管理的問題

問題:docker-compose建立容器會發現容器name和定義不一致,可是用docker-compose能夠管理,沒太明白爲啥?

  • docker-compose 基本包括了docker的基本命令:
build 構建或重建服務
help 命令幫助
kill 殺掉容器
logs 顯示容器的輸出內容
port 打印綁定的開放端口
ps 顯示容器
pull 拉取服務鏡像
restart 重啓服務
rm 刪除中止的容器
run 運行一個一次性命令
scale 設置服務的容器數目
start 開啓服務
stop 中止服務
up 建立並啓動容器

如重啓nginx

docker-compose restart nginx

dockerfile

FROM image #表明新的鏡像是從image這個基礎鏡像來的

MAINTAINER:指定該鏡像建立者

ENV:指定環境變量

COPY:將編譯機本地文件拷貝到鏡像文件系統中

EXPOSE:指定監聽的端口

ENTERPOINT:欲執行命令,使用該鏡像建立容器,容器啓動時執行,如 ENTRYPOINT ["php", "/var/www/code/easyswoole", "start"]

RUN:執行shell命令

easyswoole dockerfile

FROM php:7.1

# Version
ENV PHPREDIS_VERSION 4.0.1
ENV SWOOLE_VERSION 4.3.0
ENV EASYSWOOLE_VERSION 3.x-dev

# Timezone
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo 'Asia/Shanghai' > /etc/timezone

# Libs
RUN apt-get update \
    && apt-get install -y \
    curl \
    wget \
    git \
    zip \
    libz-dev \
    libssl-dev \
    libnghttp2-dev \
    libpcre3-dev \
    && apt-get clean \
    && apt-get autoremove

# Composer
RUN curl -sS https://getcomposer.org/installer | php \
    && mv composer.phar /usr/local/bin/composer \
    && composer self-update --clean-backups

# PDO extension
RUN docker-php-ext-install pdo_mysql

# Bcmath extension
RUN docker-php-ext-install bcmath

# Redis extension
RUN wget http://pecl.php.net/get/redis-${PHPREDIS_VERSION}.tgz -O /tmp/redis.tar.tgz \
    && pecl install /tmp/redis.tar.tgz \
    && rm -rf /tmp/redis.tar.tgz \
    && docker-php-ext-enable redis

# Swoole extension
RUN wget https://github.com/swoole/swoole-src/archive/v${SWOOLE_VERSION}.tar.gz -O swoole.tar.gz \
    && mkdir -p swoole \
    && tar -xf swoole.tar.gz -C swoole --strip-components=1 \
    && rm swoole.tar.gz \
    && ( \
    cd swoole \
    && phpize \
    && ./configure --enable-async-redis --enable-mysqlnd --enable-openssl --enable-http2 \
    && make -j$(nproc) \
    && make install \
    ) \
    && rm -r swoole \
    && docker-php-ext-enable swoole

WORKDIR /var/www/code

# Install easyswoole
RUN cd /var/www/code \
    && composer require easyswoole/easyswoole=${EASYSWOOLE_VERSION} \
    && php vendor/bin/easyswoole install

EXPOSE 9501

ENTRYPOINT ["php", "/var/www/code/easyswoole", "start"]

構建image,切換到Dockerfile同級目錄:

docker buil -t easyswoole:1.0

有了Dockerfile文件,維護就很簡單了,只需修改文件內容,從新構建便可,-t還能夠指定版本標籤。

倉庫

docker Hub存放發佈鏡像的倉庫,用戶能夠在https://hub.docker.com/中註冊帳號,既可發佈鏡像。

//登陸docker Hub
docker login Username: sun Password: 123456 Email:sun@sun.com 

//上傳鏡像
docker push easyswoole:1.0

此外可能因爲網絡問題、安全問題,還可使用私有倉庫,具體執行命令本文不在細究。

注意 docker compose能夠判斷容器間的依賴並生成正確的啓動順序,但僅僅是啓動順序,每一個容器的啓動時間不太一致,若是有依賴可能會不能正常交互致使啓動失敗。

相關文章
相關標籤/搜索