目录php
查询信息,包括运行状况、存贮位置、配置参数、网络设置等。mysql
docker inspect -f {{.State.Status}} 【容器】
docker inspect -f {{.NetworkSettings.IPAddress}} 【容器】
docker logs 【容器】nginx
-f 实时打印最新的日志git
如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
容器编排工具,容许用户在一个模版(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: RACK_ENV: development SESSION_SECRET: environments: - RACK_ENV=development - SESSION_SECRET
env_file: - .env RACK_ENV: development
net: "bridge" net: "none" net: "container:[name or id]" net: "host"
dns: 8.8.8.8 dns: - 8.8.8.8 - 9.9.9.9
能够看出docker-compose落地到具体的项目中,当具体的项目须要依赖的环境发生变化或者部署生产,能够在这些项目根目录中创建docker-compose.yml,解决如何管理的问题
问题:docker-compose建立容器会发现容器name和定义不一致,可是用docker-compose能够管理,没太明白为啥?
build 构建或重建服务 help 命令帮助 kill 杀掉容器 logs 显示容器的输出内容 port 打印绑定的开放端口 ps 显示容器 pull 拉取服务镜像 restart 重启服务 rm 删除中止的容器 run 运行一个一次性命令 scale 设置服务的容器数目 start 开启服务 stop 中止服务 up 建立并启动容器
如重启nginx
docker-compose restart nginx
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能够判断容器间的依赖并生成正确的启动顺序,但仅仅是启动顺序,每一个容器的启动时间不太一致,若是有依赖可能会不能正常交互致使启动失败。