zoukankan      html  css  js  c++  java
  • [ Docker ] 基础使用

    1. docker-ce 版本安装

    Docker采用Linux(内核)技术,所以只能运行在Linux上,官方说Linux kernel至少3.8以上,且要是64位内核;

    1.1 新版 docker-ce 安装

    docker-ce 默认文件系统为 overlay2  建议采用 CentOS 7.4 以上版本安装。本次采用 CentOS 7.7 x64

    (1)安装依赖:

    yum install -y yum-utils device-mapper-persistent-data lvm2
    

    (2)下载 yum 源文件

    wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
    

    (3)把软件仓库地址替换为 TUNA:

    sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
    

    (4)查看 docker-ce 版本

    [root@localhost ~]# yum list docker-ce --showduplicates | sort -r
    Loading mirror speeds from cached hostfile
    Loaded plugins: fastestmirror
    Installed Packages
    docker-ce.x86_64            3:19.03.2-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:19.03.1-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:19.03.0-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:18.09.9-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:18.09.8-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:18.09.7-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:18.09.6-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:18.09.5-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:18.09.4-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:18.09.3-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:18.09.2-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:18.09.1-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:18.09.0-3.el7                    docker-ce-stable 
    docker-ce.x86_64            18.06.3.ce-3.el7                   docker-ce-stable 
    docker-ce.x86_64            18.06.2.ce-3.el7                   docker-ce-stable 
    docker-ce.x86_64            18.06.1.ce-3.el7                   docker-ce-stable 
    docker-ce.x86_64            18.06.0.ce-3.el7                   docker-ce-stable 
    docker-ce.x86_64            18.03.1.ce-1.el7.centos            docker-ce-stable 
    docker-ce.x86_64            18.03.1.ce-1.el7.centos            @docker-ce-stable
    …

    yum install docker-ce  # 安装最新版
    yum install docekr-ce-<VERSION> # 安装指定版本

    这里的安装命令:

    [root@192.168.118.14 ~]#yum install docker-ce-18.06.3.ce-3.el7 -y
    

    启动、停止等命令:

    systemctl start|status|stop|enable docker
    

    docker version 查看 docker 版本等信息

    docker info 查看 docker 详细配置信息

    docker-ce 18.06 采用的默认磁盘存储驱动为 overlay2

    为 docker 运行 添加自定义参数:

    [root@192.168.118.14 ~]#cat /etc/docker/daemon.json
    {
        "registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com"],
        "hosts": ["tcp://192.168.118.14:2375", "unix:///var/run/docker.sock"],
        "data-root": "/data/docker-data",
        "storage-driver": "overlay2",
        "bip": "10.0.0.1/24",
        "fixed-cidr": "10.0.0.0/24"
    }
    

    daemon.json 配置文件严格遵守 json 语法格式,不可使用单引号,全部为双引号。

    参数说明:

    "registry-mirrors"  设置 docker 下载镜像加速,可配置多个;
     "hosts": 配置 docker daemon 监听方式;
    "data-root":修改docker存储数据的位置,默认目录为 /var/lib/docker
    "storage-driver":设定存储驱动为 overlay2 ,默认驱动为 overlay2
    "bip":设置 docker0 网桥地址为10.0.0.1 此地址也为容器网关地址;
    "fixed-cidr":桥接到 docker0 上的容器地址范围是 10.0.0.0/24
    

    重启 docker 服务

    [root@192.168.118.14 ~]#systemctl restart docker
    

    上面的配置修改可通过 docker info 查看。

    2. Docker 基础命令

     2.1 启动容器

    docker run

    可通过 docker run --help 查看相关参数。

    执行一次的容器:

    启动交互式容器:

    测试一般这样启动容器

    [root@192.168.118.14 ~]#docker run --name t1 --rm -it busybox /bin/sh

    --name:为容器命名
    --rm:容器结束后,删除该容器
    -it:进入交互式模式

    想要退出直接 exit 或者 Ctrl+D

    2.2 查看容器

    docker ps [-a][-l]
    	-a 列出所有创建的容器
    	-l 列出创建的最新的容器
         不加参数,列出docker中正在运行的容器
    

    docker inspect 容器名或者容器ID
    
    docker inspect t1  # 查看容器 t1 的详细信息
    … …
    

    2.3 镜像简单管理

    查找镜像:

    docker search 镜像名

    下载镜像:

    docker pull 镜像名

    docker images 查看本地镜像文件

    2.4 守护式容器

    守护式容器:能够长期运行,没有交互式会话,适合运行应用程序和服务

    在使用容器时,必须有一个工作在前台的守护进程且进程号为 1

    通过 docker inspect ngx_1 查看容器的 ip 地址

    通过宿主机直接访问:

    通过上面 docker ps 查看 docker COMMAND 是一个运行在前台的守护进程,通过 docker exec 命令进入到 容器内查看:

    docker exec  可直接进入容器内部

    nginx master 进程PID 为 1

    通过 docker logs 容器名 查看容器日志:

    nginx master 进程PID 为 1

    通过 docker logs 容器名 查看容器日志:

    通过 docker top 查看容器内进程

    停止守护式容器:docker stop 容器名
    直接杀掉容器:docker kill 容器名
    删除容器:docker rm 容器名

    2.5 容器内的端口映射

    docker [-P|-p]
    
    -P: 将为容器暴露的所有端口进行映射:docker run -P nginx
    -p:指定映射容器的端口:docker run -p 80 nginx
    

    访问宿主机的映射端口:

    docker run --name ngx_1 --rm -P -d nginx:alpine   --> 宿主机的端口将是随机映射

    docker run --name ngx_1 --rm -p 8080:80 -d nginx:alpine --> 11对应的映射,将容器的80端口映射到宿主机的 8080 端口

    可以绑定IP地址:

    docker run --name ngx_1 --rm -p 192.168.118.14:8080:80 -d nginx:alpine

    2.6 导入导出 Docker 镜像

    导出使用 docker save 容器名 > 容器名.tar.gz 
    导入使用 docker load < 容器名.tar.gz 
    

    save: 导出

    load: 导入

    3. 镜像管理

    3.1 基础操作

    查看镜像:

    docker images
    

    TAG 的作用主要有两点:

    1. 为镜像起一个容易理解的名字
    2. 可以通过docker tag 来重新制定镜像的仓库,这样在push时自动提交到仓库
    REPOSITORY:包含仓库信息,如 super.com/centos , 表示 super.com 仓库的 centos 名称镜像
    TAG:同一个名称的镜像可能有多个版本,默认为 latest 版本(最新版),TAG 就标明了版本
    IMAGE ID:镜像唯一 ID
    

    因此可以通过两个方法确定某个唯一的镜像:

    1. REPOSITORY:TAG 如 super.com/centos
    2. IMAGE ID:如 19485c79a9bb

    注意:如果直接使用 “REPOSITORY”,则默认“TAG”为 “latest”,镜像 redis 就标识为 "redis:latest"

    镜像名 "REPOSITORY:TAG" 可以用下面的命令重命名:

    docker tag
    

    注意:旧的镜像和新的镜像 IMAGE ID  是一致的。

    拉取镜像:
    docker pull 镜像名
    
    推送镜像:
    docker push NAME[:TAG]
    

    3.2 私有仓库搭建及测试

    192.168.118.14  私有仓库服务器
    192.168.118.15 客户端

    docker 确实很好用,一条命令,一个私有仓库就搭建完毕。

    docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry
    

    参数说明:

    -d:后台运行
    -v:把宿主机的 /opt/registry目录绑定 到 容器 /var/lib/registry 目录
    -p:映射端口;访问宿主机的 5000端口就访问到 registry 容器的服务
    --name registry 创建容器命名为 registry,可以随意定义
    registry:通过这个镜像启动,如果本地没有,则会从 dockerhub 上下载再次启动
    

    测试镜像仓库的所有镜像:

    curl http://192.168.118.14:5000/v2/_catalog
    

    192.168.118.15

    (1)修改 /etc/docker/daemon.json

    添加:
        "insecure-registries": ["192.168.118.14:5000"]
    重启docker 服务
    [root@192.168.118.15 ~]#systemctl restart docker
    

    (2)为本地的镜像打标签

    docker tag busybox:latest 192.168.118.14:5000/busybox:v0.1-1
    

    (3)将镜像上传到私有仓库

    docker push 192.168.118.14:5000/busybox
    

    测试:

      删除本地的镜像,尝试从 私有仓库拉取镜像

    3.3 镜像制作

    (1)将容器变成镜像

    docker commit <container>[repo:tag]
    -a, --author="" 指定制作镜像的作者
    -m, --message="" 记录构建镜像的信息
    -p, --pause=true docker commit 命令会将正在执行的容器暂停,加上 -p 参数即不暂停运行的容器
    

    优缺点:
    方便快捷,
    不规范,无法自动化

    示例:

    [root@192.168.118.14 ~]#docker run --name t1 -it busybox /bin/sh
    / # echo "<h1>hello busybox server.</h1>" > /tmp/index.html
    / # httpd --help
    BusyBox v1.31.0 (2019-09-04 17:25:45 UTC) multi-call binary.
    
    Usage: httpd [-ifv[v]] [-c CONFFILE] [-p [IP:]PORT] [-u USER[:GRP]] [-r REALM] [-h HOME]
    or httpd -d/-e/-m STRING
    
    Listen for incoming HTTP requests
    
    	-i		Inetd mode
    	-f		Don't daemonize
    	-v[v]		Verbose
    	-p [IP:]PORT	Bind to IP:PORT (default *:80)
    	-u USER[:GRP]	Set uid/gid after binding to port
    	-r REALM	Authentication Realm for Basic Authentication
    	-h HOME		Home directory (default .)
    	-c FILE		Configuration file (default {/etc,HOME}/httpd.conf)
    	-m STRING	MD5 crypt STRING
    	-e STRING	HTML encode STRING
    	-d STRING	URL decode STRING
    / # httpd -f -h /tmp/
    

    开启另一个ssh会话,进行 commit 操作

    4. docker 常见问题

    ssh server 是否应该包含到镜像中?

    用 ssh server 管理容器并不理想,建议不用

    一个容器究竟运行几个程序?

    一个程序比较好,因为docker 只管前台程序是否正常

    程序日志输出的问题?

    通过 volume 或者 syslog 方式

  • 相关阅读:
    ajax怎么打开新窗口具体如何实现
    关于springcloud hystrix 执行 hystrix.stream 跳转失败的问题
    Zookeeper 和Eureka比较
    Maven Install报错:Perhaps you are running on a JRE rather than a JDK?
    Oracle11g卸载步骤
    Oracle数据库备份及恢复
    python是如何进行内存管理的?
    python面试题
    json模块与hashlib模块的使用
    随机验证码、打印进度条、文件copy脚本
  • 原文地址:https://www.cnblogs.com/hukey/p/11677392.html
Copyright © 2011-2022 走看看