• Docker入门(CentOS7)


    1、docker安装
    yum -y install bash-completion     #tab键补齐包
    yum install net-tools -y
    yum -y install wget
    wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
    sed -i 's#download.docker.com#mirrors.ustc.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
    [root@docker ~]# yum install docker-ce -y     #安装Docker
    [root@docker ~]# systemctl start docker.service
    [root@docker ~]# vi /etc/sysctl.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    [root@docker ~]# docker info|version   #查看docker基本信息和版本
    [root@docker ~]# docker search cenos   #搜索cenos的docker镜像
    [root@docker ~]# vi /etc/docker/daemon.json   #配置docker镜像下载加速使用国内docker镜像源
    {
    "registry-mirrors": ["https://registry.docker-cn.com"]
    }
    [root@localhost ~]# systemctl restart docker.service   #配置完重启docker使配置生效

    2、docker的容器管理
    docker run -d -p 80:80 nginx
    run(创建并运行一个容器)
    -d 放在后台
    -p 端口映射
    -v 源地址(宿主机):目标地址(容器)
    docker stop CONTAINER_ID   #停止容器
    docker kill container_name   #杀死容器
    [root@docker ~]# docker pull centos:6.8   #下载docker镜像(不指定版本,默认会下载最新版)
    [root@docker ~]# docker images   #查看已下载的docker镜像
    [root@docker ~]# docker run -it centos:6.8 /bin/bash   #启动一个容器,不指定容器名docker将随机分配一个容器名
    [root@docker ~]# docker run -it --name centos_sshd centos:6.8 /bin/bash   #启动一个容器并指定容器名为centos_sshd
    [root@docker ~]# docker ps -a   #查看docker容器状态
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    eaf08454395c centos:6.8 "/bin/bash" 2 minutes ago Up 2 minutes centos6.8
    [root@docker ~]# docker inspect centos_sshd|eaf08454395c   #查看容器的配置信息
    [root@docker ~]# docker inspect --format '{{ .NetworkSettings.IPAddress }}' centos_sshd   #查看容器IP
    [root@docker ~]# docker exec -it centos6.8|eaf08454395c /bin/bash   #进入容器(指定容器名和容器id都可以)
    [root@docker ~]# docker attach centos6.8|eaf08454395c /bin/bash   #进入容器(使用同一个终端)
    ctrl + p再按ctrl + q退出容器并返回宿主机
    [root@docker ~]# docker rm -f eaf08454395c   #删除一个容器
    [root@docker ~]# docker rm -f `docker ps -a -q`   #批量删除容器
    注意:docker容器内的第一个进程必须一直处于前台运行的状态(必须夯住),否则这个容器,就会处于退出状态!

    3、制作容器镜像
    [root@aa30c84f20b9 /]# yum install openssh-server -y
    [root@aa30c84f20b9 /]# yum install httpd -y
    [root@aa30c84f20b9 /]# /etc/init.d/sshd start    #初始化ssh服务并生成密钥对,否则不能ssh连接
    [root@localhost ~]# docker commit aa30c84f20b9 centos_sshd_httpd:v1    #制作一个容器镜像
    sha256:e8ea675ba1d002de5019d743281c052130c17cc9feedda4ab839b9bf262847e2
    [root@docker ~]# docker commit --help
    Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    容器id或容器名 新的镜像名字[:版本号可选]
    [root@6f15becdbbd2 /]# cat init.sh
    #!/bin/bash
    echo "123456"|passwd --stdin root
    /etc/init.d/httpd start
    /usr/sbin/sshd -D
    [root@docker ~]# docker run -d -p 80:80 -p 1022:22 --name centos_sshd_httpd centos_sshd_httpd:v1 /init.sh   #通过脚本同时启动容器中的多个服务
    -d:放在后台运行
    -p:端口映射(宿主机端口:容器的端口,--name:设置容器名)
    [root@docker ~]# docker save centos_sshd_httpd >centos_ssh_httpd.tar.gz    #保存容器镜像
    [root@docker ~]# docker image rm -f centos_sshd_httpd       #删除镜像
    [root@docker ~]# docker image load -i centos_ssh_httpd.tar.gz      #导入镜像
    0f0fd98df580: Loading layer [==================================================>] 128.6MB/128.6MB
    Loaded image: centos_sshd_httpd:v1

    4、dockerfile自动构建docker镜像
    dockerfile主要组成部分:
    基础镜像信息 FROM:centos:6.8
    制作镜像操作指令 RUN yum install openssh-server -y
    容器启动时执行指令 CMD ["/bin/bash"]
    dockerfile常用指令:
    FROM 这个镜像的妈妈是谁?(指定基础镜像)
    LABEL 告诉别人,谁负责养它?(指定维护者信息,可以没有)
    RUN 你想让它干啥(在命令前面加上RUN即可)
    ADD 给它点创业资金(复制文件,会自动解压)
    WORKDIR 我是cd,今天刚化了妆(设置当前工作目录)
    VOLUME 给它一个存放行李的地方(设置卷,挂载主机目录)
    EXPOSE 它要打开的门是啥(指定对外的端口)(-P 随机端口)
    CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)(容易被替换)
    使用ADD的时候,ADD init.sh /init.sh(init.sh文件必须放在Dockerfile同级目录下!!!)
    dockerfile其他指令:
    COPY 复制文件 (复制文件,不会自动解压)
    ENV 环境变量
    ENTRYPOINT 容器启动后执行的命令(无法被替换,启容器的时候指定的命令,会被当成参数)

    [root@docker dockerfile]# vi Dockerfile
    FROM centos:6.8
    RUN yum install openssh-server -y
    RUN /etc/init.d/sshd start
    RUN yum install httpd -y
    ADD init.sh /init.sh
    CMD ["/bin/bash","/init.sh"]
    [root@docker dockerfile]# vi init.sh
    #!/bin/bash
    /etc/init.d/httpd start
    echo "123456"|passwd --stdin root
    /usr/sbin/sshd -D
    [root@docker dockerfile]# ll
    total 8
    -rw-r--r--. 1 root root 152 Mar 20 10:27 Dockerfile
    -rw-r--r--. 1 root root 91 Mar 20 11:02 init.sh
    [root@docker ~]# docker build -t centos_sshd_httpd:v2 .    #利用Dockfile文件创建镜像,. 表示Dockerfile文件在当前目录
    ---> d4ba7df51af6
    Step 3/6 : RUN /etc/init.d/sshd start
    ---> Running in 547cad2caecc
    Generating SSH2 RSA host key: [ OK ]
    Generating SSH1 RSA host key: [ OK ]
    Generating SSH2 DSA host key: [ OK ]
    Starting sshd: [ OK ]
    Removing intermediate container 547cad2caecc
    ---> a3815ee38b0c
    [root@docker ~]# docker run -d -p 80:80 -p 1022:22 --name centos_dockerfile centos_sshd_httpd:v2
    [root@docker dockerfile]# vi init.sh     #设置root密码从环境变量中读入
    #!/bin/bash
    /etc/init.d/httpd start
    echo "$password"|passwd --stdin root
    /usr/sbin/sshd -D
    [root@docker ~]# docker run -d -p 81:80 -p 2022:22 --name centos_docker -e password=test123 centos_sshd_httpd:v2   #设置root密码为test123
    注意:
    用Dockerfile文件创建的镜像不能从宿主机ssh登陆,否则会有以下错误
    [root@docker dockerfile]# ssh 10.47.39.100 -p 1022
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
    Someone could be eavesdropping on you right now (man-in-the-middle attack)!
    It is also possible that a host key has just been changed.
    The fingerprint for the RSA key sent by the remote host is
    SHA256:HoZcYKgbOtzM70y2uPURVaSkKaqPZNd6lG5GQjAjorU.
    Please contact your system administrator.
    Add correct host key in /root/.ssh/known_hosts to get rid of this message.
    Offending RSA key in /root/.ssh/known_hosts:3
    RSA host key for [10.47.39.100]:1022 has changed and you have requested strict checking.
    Host key verification failed.
    [root@docker ~]# docker run -d -p 80:80 -p 1022:22 -h Nginx -e password=test123 --name centos6.8 centos_sshd_httpd:v2   #-h:指定主机名;--name:指定容器名

    5、docker-compose(单机版的容器编排工具)
    yum install -y python2-pip(需要epel源)
    pip install docker-compose
    ##docker-compose配置文件详解
    http://www.jianshu.com/p/2217cfed29d7

    cd my_wordpress/
    vi docker-compose.yml
    version: '3'

    services:
    db:
    image: mysql:5.7
    volumes:
    - /oldboy:/var/lib/mysql
    restart: always
    environment:
    MYSQL_ROOT_PASSWORD: somewordpress
    MYSQL_DATABASE: wordpress
    MYSQL_USER: wordpress
    MYSQL_PASSWORD: wordpress

    wordpress:
    depends_on:
    - db
    image: wordpress:latest
    ports:
    - "80"
    restart: always
    environment:
    WORDPRESS_DB_HOST: db:3306
    WORDPRESS_DB_USER: wordpress
    WORDPRESS_DB_PASSWORD: wordpress
    #启动
    docker-compose up
    #后台启动
    docker-compose up -d

    6、重启docker服务,容器全部退出的解决办法
    方法一:docker run --restart=always
    方法二:"live-restore": true
    docker server配置文件/etc/docker/daemon.json参考
    {
    "registry-mirrors": ["http://b7a9017d.m.daocloud.io"],
    "insecure-registries":["10.0.0.11:5000"],
    "live-restore": true
    }

    docker + k8s的博客文章
    http://www.cnblogs.com/CloudMan6/p/6693772.html
    https://github.com/feiskyer/kubernetes-handbook/blob/master/zh/SUMMARY.md
    https://github.com/feiskyer/kubernetes-handbook
    k8s安装方法:
    go源码编译安装
    二进制安装 (比较适合)
    yum 安装 1.5 (比较适合)
    kubeadm(容器化部署,)
    minikube(学习k8s)

    docker学习链接:
    第一篇:
    http://www.cnblogs.com/zhenyuyaodidiao/p/6500830.html
    第二篇:
    http://www.cnblogs.com/zhenyuyaodidiao/p/6500720.html
    第三篇:
    http://www.cnblogs.com/zhenyuyaodidiao/p/6500897.html
    第四篇:
    https://www.cnblogs.com/breezey/p/6553738.html
    第五篇:
    http://www.cnblogs.com/breezey/p/6556913.html

  • 相关阅读:
    263邮箱配置告警发件配置
    交换机日期时间设置
    【Switch】- 配置日志文件输出syslog信息
    网络设备断电注意事项
    H3C交换机保存机制
    Docker学习笔记
    小型网络组网模型讲解
    Linux下管理员强行踢出用户的命令使用方法
    Linux SNMP 监控一些常用OID
    MySQL解决方案
  • 原文地址:https://www.cnblogs.com/xwupiaomiao/p/8607735.html
Copyright © 2020-2023  润新知