docker

下载阿里云base源

  curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirros.aliyun.com/repo/Centos-7.repo

通过yum安装epel源

  yum install -y epel-release

查看可安装的docker版本信息

  yum list docker --show-duplicates

安装 yum-utils工具

  yum install -y yum-utils

添加docker源

  yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

重新查看可安装的docker版本信息

  yum list docker --show-duplicates

安装最新版本的docker

  yum install -y docker or yum install -y docker-ce.x86_64 3:19.03.13-3.el7 安装指定版本

配置docker_daemon.conf

PS:国内镜像源需要改为daemon.conf而并非daemon.json

{

  "graph": "/data/docker",

  "storage-driver": "overlay2",

  "insecure-registries":["registry.access.redhat.com","quay.io"],

  "registry-mirrors":["https://q2gr04ke.mirror.aliyuncs.com"],

  "bip":"172.7.5.1/24",

  "exec-opts":["native.cgroupdriver=systemd"],

  "live-restore":true

}

开机启动并启动docker

  systemctl enable --now docker

检查docker版本信息

  docker info

启动第一个容器

  docker run hello-world

登录hub.docker.com命令

  docker login docker.io

  解密密码

    cat /root/.docker/config.json --auth:base64加密密码,可解密

    echo "eXlsaWtlMTY6eXlsaWtlMTYuMTIz"|base64 -d"

搜索镜像

  docker search alpine

下载镜像

  docker pull alpine

  下载指定版本镜像

    docker pull alpine:3.10.3

  下载指定版本镜像使用完全路径:生成环境使用

    docker pull docker.io/library/alpine:3.10.1

查看镜像

  docker images ls

给指定镜像打标签

  docker tag 965ea09ff2eb docker.io/ts/alpine:v3.10.3

推送镜像:命名尽量不要太简单避免重复标签名重复无法上传!

  docker push docker.io/ts/alpine:v3.10.3

再次给镜像打标签

  docker tag 965ea09ff2eb docker.io/ts001/alpine:v3.10.3

再次推送镜像:推拉镜像默认走https协议

  docker push docker.io/ts001/alpine:v3.10.3

删除标签

  docker rmi docker.io/ts001/alpine:v3.10.3

强制删除镜像

  docker rmi -f 965ea09ff2eb

----------

登录registry

  docker login docker.io

查找镜像

  docker search alpine

拉去镜像

  docker pull alpine

拉取指定版本镜像

  docker pull alpine:3.10.1

列出本地镜像

  docker images|docker image ls

给镜像打标签

  docker tag ${image_id}${tag}

推送镜像

  docker push docker.io/stanleyws/alpine:3.10.1

删除镜像(删除标签)

  docker rmi ${image_id}|docker rmi ${image_name}

-----

docker镜像特性                                       

  docker镜像位于bootfs之上                          writable      container

  每一层镜像的下面一层称为其父镜像(父子关系)        add apache    image      references parent

  第一层镜像为Base Image                            add emacs      image

  容器在最顶层                                      debian        base image

  其下的所有层都为readonly                          lxc,aufs/btrfs kernel

  docker将readonly的fs层称作"image"

----------

列出本地的容器进程

  docker ps -a

启动容器(运行镜像)

  docker run是日常用的最频繁用的命令之一,同样也是较为复杂的命令之一

  命令格式: docker run [OPTION] IMAGE [COMMAND] [ARG...]

  OPTIONS:选项

    -i: 表示启动一个可交互的容器,并持续打开标准输入

    -t: 表示使用终端关联到容器的标准输入输出上

    -d: 表示将容器放置后台运行

    -rm: 退出后即删除容器

    -name: 表示定义容器唯一名称

    IMAGE: 表示要运行的镜像

    COMMAND: 表示启动容器时要运行的命令*

  交互式启动一个容器

    docker run -ti stanleyws/alpine:v3.10.1 /bin/sh

    ip a:分配了一个ip地址

    cat /etc/issue:查看版本信息

  非交互式启动一个容器:运行完命令后退出

    docker run --rm stanleyws/alpine:v3.10.1 /bin/echo hello :一次性运行容易,退出时自动删除容器 -rm

    hello

  非交互式启动一个后台容器

    docker run -d --name myalpine stanleyws/alpine:v3.10.1 /bin/sleep 300

  查看宿主机进程

    ps aux|grep sleep|grep -v grep

  交互式进入容器

    docker exec -ti 69d328913f16 /bin/sh:运行中的容器id

  交互式操作容器

    docker start|stop|restart 69d328913f16

删除容器

  docker rm 69d328913f16

过滤出已经退出的容器并删除

  for i in `docker ps -a|grep -i exit|awk '{print $1}'`;do docker rm -f $i;done

锁表并保存镜像里面当前已操作的所有更新到一个新的镜像

  docker commit -p 69d328913f16 xiaoyunhui/apache:v1.10

将镜像导出到本地

  docker save 69d328913f16 > alpine:v3.10.3_with_1.txt.tar

将本地文件导入到镜像

  docker load < alpine\:v3.10.3_with_1.txt.tar

查看容器日志

  docker logs 69d328913f16

docker高级功能

  映射端口

    docker run -p 容器外端口:容器内端口

  挂载数据卷

    docker run -v 容器外目录:容器内目录

  传递环境变量并打印

    docker run --rm -e E_OPTS=adcdefg test/alpine:latest printenv

  容器内安装软件(工具)

    yum/agt-get/apt等

    运行一个容器

      docker run --rm -d test/nginx:v1.12.2.01

    进入容器

      docker exec test:nginx:v1.12.2.01 /bin/bash

    编写apt源

      #tee /etc/apt/sources.list << EOF

    deb http://mirrors.163.com/debian/ jessie main non-free contrib

    deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib

    EOF

    更新apt源并安装curl

      #apt-get update && apt-get install curl -y

  检查容器运行环境

    docker inspect 57cd7c49344682f4e6afe2

容器的生命周期

  检查本地是否存在镜像,如果不存在即从远端仓库检索

  利用镜像启动容器

  分配一个文件系统,并在只读的镜像层外挂载一层可读写层

  从宿主机配置的网桥接口中桥接一个虚拟接口到容器

  从地址池配置一个ip地址给容器

  执行用户指定的指令

  执行完毕后容器终止

----------

dockerfile 用来创建镜像的txt命令集合文件

  4组核心的dockerfile指令

    user/workdir指令

      vi /data/dockerfile/Dockerfile

      FROM docker.io/oldboy1103/nginx:v1.12.2

      USER nginx

      WORKDIR /usr/share/nginx/html

      构建镜像

        docker build . -t docker.io/oldboy1103/nginx:v1.12.2

    add/expose指令

      将本地文件推到容器中;开启指定端口

      FROM docker.io/oldboy1103/nginx:v1.12.2

      ADD index.html /usr/share/nginx/html/index.html

      EXPOSE 80

      构建镜像

        docker build . -t stanleyws/nginx:v1.12.2

    run/env指令

      设置变量;执行动作

        FROM centos:7

        ENV VER 9.11.4-74.el7_6.1

        RUN yum install bind-$VER -y

      构建镜像

        docker build . -t oldboy1103/bind:v9.11.4

    cmd/entrypoini指令

      cmd: 运行命令

        FROM centos:7

        RUN yum install httpd -y

        CMD ["httpd","-D","FOREGROUND"]

      构建镜像

        docker build . -t test/httpd:vts0.1

      entrypoini: 将脚本引入容器执行

        FROM centos

        ADD entrypoint.sh /entrypoint.sh

        RUN yum install epel-release -q -y && yum install nginx -y

        ENTRYPOINT /entrypoint.sh

        chmod 775 entrypoint.sh

        cat entrypoint.sh

          #!/bin/bash

          /sbin/nginx -g "daemon off;"

      构建镜像

        docker build . -t test/httpd:vts0.1

docker的网络模型

  NAT(默认)

    路由模式

  None

    内网模式

  Host

    主机模式

  联合网络

    多个容器共享一个网络名称空间

      docker run -it --rm --name lhwl2 --net=container:d62807b4af37 oldboy/nginx:test /bin/bash

你可能感兴趣的:(docker)