龙空技术网

dcoker CLI 使用

X潘说电影 36

前言:

而今同学们对“cnetos72安装docker”都比较关注,小伙伴们都想要知道一些“cnetos72安装docker”的相关文章。那么小编也在网上搜集了一些有关“cnetos72安装docker””的相关资讯,希望朋友们能喜欢,小伙伴们快快来学习一下吧!

docker CLI一、docker 基本使用环境信息与 Repo

export/import 与 save/load 的区别

docker info [option]docker info --format '{{json .}}'docker info [option]docker version --format '{{.Server.Version}}'
镜像管理
# docker image1. docker image build            # 从Dockfile构建镜像   docker image build -t image:1.0 -f /root/Dockerfile2. docker image inspect          # 查看镜像信息3. docker image save 镜像ID       # 根据镜像 ID 将保存成一个文件   docker image save -o ubuntu.tar ubuntu4. docker image load              # 加载镜像   docker image load -i < ubuntu.tar5. docker image ls -f dangling=true  # 列出镜像   docker images   docker image prune                # 删除所有悬空镜像6. docker image pull/push      # 拉取/推送镜像7. docker image rm       # 删除镜像8. docker image tag       # 为镜像创建标签
容器管理
# docker container1. docker container attach     # 连接到正在运行中的容器2. docker container exec      # 在正在运行的容器中执行命令   docker container exec -it webserver bash3. docker container run     # 运行命令在新容器中   docker container run -itd --name Ubuntu ubuntu:16.04 bash4. docker container export     # 将容器的文件系统导出为tar存档, 根据容器 ID 将镜像导出成一个文件   docker container 1e560fca3906 > ubuntu.tar6. docker container import     # 从tar导入内容以创建系统镜像7. docker container inspect    # 显示容器详情8. docker container logs        # 获取容器的日志9. docker container prune      # 删除所有停止的容器10. docker container rm        # 删除容器      docker rm -f $(docker ps -q -a)11. docker container start/stop     # 启动/停止容器12. docker container stats             # 显示容器资源使用情况统计信息的实时流13. docker container top              # 显示容器的运行过程14. docker container kill              # 结束一个或多个正在运行的容器
网络与数据持久化

docker_vloumes 参考

bridge 默认模式,相当于 VMware 中的 NAT 模式(VMnet8) --net=bridge 容器使用独立 Network Namespace,并连接到 docker0 虚拟网卡(默认模式);host 模式,相当于 VMware 中的桥接模式(VMnet0) --net=host 与宿主机在同一个网络中,但没有独立 IP 地址;none 模式(lo), --net=nonecontainer 模式, --net=container:NAME or ID 指定 不和宿主机共享,新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等;补充 VMware 的三种网络模式1)桥接模式:vmnet0 桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信;在桥接模式下,虚拟机 ip 地址需要与主机在同一个网段,如果需要联网,则网关与 DNS 需要与主机网卡一致;

vmnet0

2)仅主机模式:vmnet1 Host-Only 模式其实就是 NAT 模式去除了虚拟 NAT 设备;使用 VMware Network Adapter VMnet1 虚拟网卡连接 VMnet1 虚拟交换机来与虚拟机通信的,Host-Only 模式将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只与主机相互通讯;

vmnet1 vmnet1

3)NAT 模式:vmnet8 NAT 模式借助虚拟 NAT 设备和虚拟 DHCP 服务器,使得虚拟机可以联网;在 NAT 模式下,虚拟机 ip 地址需要与 vmnet8 同一个网段,如果需要联网,则网关与 DNS 需要与 vmnet8 DHCP 范围内;

vmnet8

# docker network1. docker network connect   # Connect a container to a network2. docker network create     # Create a network3. docker network disconnect # Disconnect a container from a network4. docker network inspect   # Display detailed information on one or more networks5. docker network ls         # List networks6. docker network prune     # Remove all unused networks7. docker network rm         # Remove one or more networks# dokcer volume1. docker volume create     # Create a volume2. docker volume inspect     # Display detailed information on one or more volumes3. docker volume ls         # List volumes4. docker volume prune       # Remove all unused local volumes5. docker volume rm         # Remove one or more volumes1) volumes:Docker管理宿主机文件系统的一部分,/var/lib/docker/volumes(**官方推荐的持久化方案**)docker run -d -it --name=nginx-test -p 88:80 -v nginx-vol:/usr/share/nginx/html/nginxdocker run -d -it --name=nginx-test -p 88:80 --mount src=nginx-vol,dst=/usr/share/nginx/html nginx2) bind mounts:可以存储在宿主机系统的任意位置,必须先创建好挂载数据卷,不可移植;docker run -itd --name=nginx-test --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx3) tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统;(**一般都不会用的方式**);
系统日志
# docker logs1. docker container run --name test -d busybox sh -c "while true; do $(echo date); sleep 1; done"2. docker logs -f --until=2s test
dockerfile指令

指令

描述

指令

描述

FROM

构建基于的镜像

MAINTAINER

镜像维护者信息

RUN

构建镜像运行的 shell 命令

CMD

运行容器执行的 shell 命令

ARG

构建镜像时指定参数(效果同 ENV),ARG 设置的环境变量仅对 Dockerfile 内有效

ENV

容器内部环境变量

COPY

拷贝文件或目录到镜像,不会自动解压,SRC 只能是本地文件

ADD

拷贝文件或目录到镜像

ENTRYPOINT

运行容器执行的 shell 命令,但其不会被 docker run 的命令行参数指定的指令所覆盖

HEALTHCHECK

健康检查

EXPOSE

容器运行服务端口

WORKDIR

为 RUN/CMD/ENTRYPOINT 设置工作目录

USER

为 RUN/CMD/ENTRYPOINT 执行命令指定用户

VOLUME

指定容器挂载点到宿主机自动生成的目录

ONBUILD

触发指令,以当前镜像构建下一级镜像才会执行

LABEL

给镜像添加元数据,key=value

几个例子构建 JAVA

# 运行容器执行的shell命令# ENTRYPOINT ["<executeable>","<param1>","<param2>",...]# CMD <shell 命令># CMD ["<可执行文件或命令>","<param1>","<param2>",...]# CMD ["<param1>","<param2>",...]  该写法是为 ENTRYPOINT 指令指定的程序提供默认参数FROM cnetos:7MAINTAINER anyue967ADD jdk-8u45-linux-64.tar.gz /usr/localENV JAVA_HOME /usr/local/jdk1.8.0_45          # ENV JAVA_HOME=/usr/local/jdk1.8.0_45ADD apache-tomcat-8.0.16.tar.gz /usr/localCOPY server.xml /usr/local/apache-tomcat-8.0.46/confRUN rm -f /usr/local/*.tar.gzWORKDIR /usr/local/apache-tomcat-8.0.46EXPOSE 8080ENTRYPOINT ["./bin/catalina.sh", "run"]
构建 TOMCAT
FROM centosMAINTAINER anyu967COPY test.txt /usr/local/container.txtADD jdk-8u171-linux-x64.tar.gz /usr/local/ADD apache-tomcat-9.0.8.tar.gz /usr/localRUN yum install -y vimENV MYPATH /usr/localWORKDIR $MYPATHENV JAVA_HOME /usr/local/jdk1.8.0_171ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8EXPOSED 8080# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh"]# CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"]CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.8/bin/log/catalina.out
构建 PHP
FROM centos:7MAINTAINER anyue967RUN yum install -y gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel \    libjpeg-devel libpng-devel openssl-develADD php-5.6.31.tar.gz /tmp/RUN cd /tmp/php-5.6.31 && \    ./configure --prefix=/usr/local/php \    --with-config-file-path=/usr/local/php/etc \    --with-mysql --with-mysqli \    --with-openssl --with-zlib --with-curl --with-gd \    --with-jpeg-dir --with-png-dir --with-iconv \    --enable-fpm --enable-zip --enable-mbstring && \    make -j 4 && \    make install && \    cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && \    sed -i "s/127.0.0.1/0.0.0.0/" /usr/local/php/etc/php-fpm.conf && \    sed -i "21a \daemonize = no" /usr/local/php/etc/php-fpm.conf  # 21行追加 daemonize = noCOPY php.ini /usr/local/php/etcRUN rm -rf /tmp/php-5.6.31* && yum clean allWORKDIR /usr/local/phpEXPOSE 9000CMD ["./sbin/php-fpm", "-c", "/usr/local/php/etc/php-fpm.conf"]
二、docker 工具(重点介绍 compose)Docker-Compose
docker-compose buliddocker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]docker-compose up -d  # 在后台启动所有服务docker-compose stopdocker-compose psdocker-compose logs
介绍 Docker-Compose 项目是 Docker 官方的开源项目,负责实现对 Docker容器集群的快速编排可以轻松、高效的管理容器; Docker-Compose 是一个用于定义和运行多容器 Docker 的应用程序工具,**docker-compose.yml**; Docker-Compose 将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)docker-composer 安装
sudo curl -L (uname -s)-$(uname -m) -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-composesudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

案例 编写 Dockerfile

构建⼀个 Docker 镜像(不包含 MySQL 服务端程序),

实现:

1. 镜像中包含⼀个 shell 脚本,容器启动后每隔 30s 收集 MySQL 数据库当前的连接数,将数据同时输出⾄ /data/log ⽂件(⽇志可以持久化保存)及标准输出中

2. 数据库 IP、端⼝、⽤户及密码可以在容器启动时通过 -e 指定环境变量来修改要求容器

3. 启动后可以使⽤ docker logs container_name 和 docker exec -it container_name tail -f /data/log 两种⽅式查看⽇志信息 每次输出的信息格式如下 [2019-01-01 00:00:00] Number of active DB connections is 10.

#!/bin/bash# shell 脚本 # 收集日志的脚本 conn.shflag=1while [ ${flag} -gt 0 ]; doMYSQL_IP=$MYSQL_IPMYSQL_PORT=$MYSQL_PORTMYSQL_USERNAME=$MYSQL_USERNAMEMYSQL_PASSWORD=$MYSQL_PASSWORDFORMAT=$(date +"%Y-%m-%d %H:%M:%S")conn=$(mysql -u${MYSQL_USERNAME} -p${MYSQL_PASSWORD} -h${MYSQL_IP} -P${MYSQL_PORT} -e "show status like 'Threads_running';" |grep "Threads_running" |awk '{print $2}')echo "[${FORMAT} Number of active DB connections is ${conn}.]" |tee -a /data/logsleep 30done
# dockerfileFROM centos:7.9.2009RUN rm -f /etc/yum.repos.d/*ADD mysql-community-client-5.7.31-1.el7.x86_64.rpm /rootADD mysql-community-common-5.7.31-1.el7.x86_64.rpm /rootADD mysql-community-libs-5.7.31-1.el7.x86_64.rpm /rootADD Centos-7.repo /etc/yum.repos.d/ADD conn.sh /root/RUN yum install -y /root/mysql-community-*.rpmENV MYSQL_IP ""ENV MYSQL_PORT ""ENV MYSQL_USERNAME ""ENV MYSQL_PASSWORD ""RUN chmod +x /root/conn.shENTRYPOINT ["/root/conn.sh"]

编写 Docker-compose 编写 docker-compose.yml 脚本

使⽤ Dockerfile 中构建的镜像及 MySQL 镜像启动服务

# 配置文件.env

# compose ⇒ (mysql & conn)

# **工程(project),服务(service)以及容器(container)**

# .envMYSQL_IP=Your's host IPMYSQL_PORT=Your's db portMYSQL_USERNAME=Your's db usernameMYSQL_PASSWORD=Your's db password
version: '3'services:   mysql:      container_name: mysql      image: mysql:5.6.38      restart: always      ports:         - 3306:3306      environment:         - MYSQL_ROOT_PASSWORD=Your's password    conn:       container_name: conn       build:           context: .           dockerfile: Dockerfile           restart: always    environment:        MYSQL_IP: "${MYSQL_IP}"        MYSQL_PORT: "${MYSQL_PORT}"        MYSQL_USERNAME: "${MYSQL_USERNAME}"        MYSQL_PASSWORD: "${MYSQL_PASSWORD}"    volumes:        - /data:/data
Docker Machine介绍

负责在多种平台上快速安装 Docker 环境;

Docker-swarm介绍

提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案, 用户可以将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容器云平台;

标签: #cnetos72安装docker