Docker基础:Docker的常用操作

核心要素及常用操作详解

在这里插入图片描述

三大核心要素:镜像(Image)、容器(Container)、仓库(Registry)

镜像(Image)

打包了业务代码及运行环境的包,是静态的文件,不能直接对外提供服务。

容器(Container)

镜像的运行时,可以对外提供服务。

仓库(Registry)

存放镜像的地方

  • 公有仓库,Docker Hub,阿里,网易…
  • 私有仓库,企业内部搭建
    • Docker Registry,Docker官方提供的镜像仓库存储服务
    • Harbor, 是Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功能
  • 镜像访问地址形式 registry.devops.com/demo/hello:latest,若没有前面的url地址,则默认寻找Docker Hub中的镜像,若没有tag标签,则使用latest作为标签。 比如,docker pull nginx,会被解析成docker.io/library/nginx:latest
  • 公有的仓库中,一般存在这么几类镜像
    • 操作系统基础镜像(centos,ubuntu,suse,alpine)
    • 中间件(nginx,redis,mysql,tomcat)
    • 语言编译环境(python,java,golang)
    • 业务镜像(django-demo…)

容器和仓库不会直接交互,都是以镜像为载体来操作。

  1. 查看镜像列表

    $ docker images
    
  2. 如何获取镜像

    • 从远程仓库拉取

      # 推荐alpine
      $ docker pull nginx:alpine
      $ docker images
      
    • 使用tag命令

      $ docker tag nginx:alpine 192.168.128.128:5000/nginx:alpine
      $ docker images
      
    • 本地构建

      $ docker build . -t my-nginx -f Dockerfile
      
  3. 如何通过镜像启动容器

    $ docker run --name my-nginx -d nginx:alpine
    
  4. 如何知道容器内部运行了什么程序?

    # 进入容器内部,分配一个tty终端
    $ docker exec -ti my-nginx /bin/sh
    # ps aux
    
  5. docker怎么知道容器启动后该执行什么命令?

    通过docker build来模拟构建一个nginx的镜像,

    • 创建Dockerfile

      # 告诉docker使用哪个基础镜像作为模板,后续命令都以这个镜像为基础 
      FROM ubuntu
      
      # 替换源
      RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
      
      # RUN命令会在上面指定的镜像里执行命令 
      RUN apt-get update && apt install -y nginx
      
      #告诉docker,启动容器时执行如下命令
      CMD ["/usr/sbin/nginx", "-g","daemon off;"]
      
    • 构建本地镜像

      $ docker build . -t my-nginx:ubuntu -f Dockerfile
      
  • 使用新镜像启动容器

       $ docker run --name my-nginx-ubuntu -d my-nginx:ubuntu
    
  • 进入容器查看进程

       $ docker exec -ti my-nginx-ubuntu /bin/sh
       # ps aux
    
  1. 如何访问容器内服务

    # 进入容器内部
    $ docker exec -ti my-nginx-alpine /bin/sh
    # ps aux|grep nginx
    # curl localhost:80
    
  2. 宿主机中如何访问容器服务

    # 删掉旧服务,重新启动
    $ docker rm -f my-nginx-alpine
    $ docker run --name my-nginx-alpine -d -p 8080:80 nginx:alpine
    $ curl 172.21.51.143:8080
    
  3. docker client如何与daemon通信

    # /var/run/docker.sock
    $ docker run --name portainer -d -p 9001:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
    
操作演示

在这里插入图片描述

  1. 查看所有镜像:
$ docker images
  1. 拉取镜像:
$ docker pull nginx:alpine
  1. 如何唯一确定镜像:
  • image_id
  • repository:tag
$ docker images
REPOSITORY    TAG                 IMAGE ID            CREATED             SIZE
nginx         alpine              377c0837328f        2 weeks ago         19.7MB
  1. 导出镜像到文件中

    $ docker save -o nginx-alpine.tar nginx:alpine
    
  2. 从文件中加载镜像

    $ docker load -i nginx-alpine.tar
    
  3. 部署带认证的镜像仓库

    # 创建 Docker Registry 认证文件目录
    mkdir /var/lib/registry_auth
    
    # 使用 htpasswd 来创建加密文件
    yum install -y httpd-tools
    htpasswd -Bbn admin admin > /var/lib/registry_auth/htpasswdhtpasswd
    
    ## 使用docker镜像启动镜像仓库服务
    docker run -p 5000:5000 \
    --restart=always \
    --name registry \
    -v /var/lib/registry:/var/lib/registry \
    -v /var/lib/registry_auth/:/auth/ \
    -e "REGISTRY_AUTH=htpasswd" \
    -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
    -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
    -d registry
    
  4. 推送本地镜像到镜像仓库中

    ## 镜像仓库给外部访问,不能通过localhost,尝试使用内网地址192.168.128.128:5000/nginx:alpine
    docker tag nginx:alpine 192.168.128.128:5000/nginx:alpine
    docker push 192.168.128.128:5000/nginx:alpine
    The push refers to repository [192.168.128.128:5000/nginx]
    Get https://192.168.128.128:5000/v2/: http: server gave HTTP response to HTTPS client
    ## docker默认不允许向http的仓库地址推送,如何做成https的,参考:https://docs.docker.com/registry/deploying/#run-an-externally-accessible-registry
    ## 我们没有可信证书机构颁发的证书和域名,自签名证书需要在每个节点中拷贝证书文件,比较麻烦,因此我们通过配置daemon的方式,来跳过证书的验证:
    cat /etc/docker/daemon.json
    {
      "registry-mirrors": [
        "https://8xpk5wnt.mirror.aliyuncs.com"
      ],
      "insecure-registries": [
         "192.168.128.128:5000"
      ]
    }
    systemctl restart docker
    docker push 192.168.128.128:5000/nginx:alpine
    
    # 会提示认证失败 ,no basic auth credentials,需要登录
    docker login 192.168.128.128:5000
    
    ## 查看仓库内元数据
    curl -u admin:admin -X GET http://192.168.128.128:5000/v2/_catalog
    curl -u admin:admin  -X GET http://192.168.128.128:5000/v2/nginx/tags/list
    
    
  5. 删除镜像

    docker rmi nginx:alpine
    
  6. 查看容器列表

    ## 查看运行状态的容器列表
    $ docker ps
    
    ## 查看全部状态的容器列表
    $ docker ps -a
    
  7. 启动容器

    ## 后台启动
    $ docker run --name nginx -d nginx:alpine
    
    ## 映射端口,把容器的端口映射到宿主机中,-p <host_port>:<container_port>
    $ docker run --name nginx -d -p 8080:80 nginx:alpine
    
    ## 资源限制,最大可用内存500M
    $ docker run --memory=500m nginx:alpine
    
  8. 容器数据持久化

    ## 挂载主机目录
    $ docker run --name nginx -d  -v /opt:/opt  nginx:alpine
    $ docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456  -d -v /opt/mysql/:/var/lib/mysql mysql:5.7
    
  9. 进入容器或者执行容器内的命令

    $ docker exec -ti <container_id_or_name> /bin/sh
    $ docker exec <container_id_or_name> hostname
    
  10. 主机与容器之间拷贝数据

    ## 主机拷贝到容器
    $ echo '123'>/tmp/test.txt
    $ docker cp /tmp/test.txt nginx:/tmp
    $ docker exec nginx cat /tmp/test.txt
    123
    
    ## 容器拷贝到主机
    $ docker cp nginx:/tmp/test.txt ./
    
  11. 查看容器日志

    ## 查看全部日志
    $ docker logs nginx
    
    ## 实时查看最新日志
    $ docker logs -f nginx
    
    ## 从最新的100条开始查看
    $ docker logs --tail=100 -f nginx
    
  12. 停止或者删除容器

    ## 停止运行中的容器
    $ docker stop nginx
    
    ## 启动退出容器
    $ docker start nginx
    
    ## 删除非运行中状态的容器
    $ docker rm nginx
    
    ## 删除运行中的容器
    $ docker rm -f nginx
    
  13. 查看容器或者镜像的明细

    ## 查看容器详细信息,包括容器IP地址等
    $ docker inspect nginx
    
    ## 查看镜像的明细信息
    $ docker inspect nginx:alpine
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DevonL77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值