• docker常用操作


    安装 Docker
    Docker 分为 CE 和 EE 两大版本。
    CE 即社区版 EE 即企业版。

    一. 卸载旧版本Docker

    yum remove docker  docker-client  docker-client-latest docker-common  docker-latest  docker-latest-logrotate  docker-logrotate  docker-selinux   docker-engine-selinx  docker-engine 
    
    • 1

    二.使用yum安装必要系统工具

    yum update -y 
    yum makecache 
    yum install  -y  yum-utils  device-mapper-persistent-data  lvm2
    
    • 1
    • 2
    • 3
    1. 添加软件源信息

    阿里云源

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

    微软源

    yum –config-manager –add-repo http://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

    官方源

    https://download.docker.com/linux/centos/docker-ce.repo

    1. 如果需要测试版本的 Docker CE 请使用以下命令
      yum-config-manager --enable docker-ce-test

    安装 Docker CE
    yum makecache fast //更新 yum 软件源缓存
    如果你想安装特定 docker-ce 版本,先列出 repo 中可用版本,然后选择安装
    yum list docker-ce --showduplicates | sort -r

    yum install docker-ce //安装 Docker-ce或docker-ce-版本

    安装方法二:
    curl -fsSL get.docker.com -o get-docker.sh //使用脚本安装
    sh get-docker.sh --mirror Aliyu
    或 sh get-docker.sh --mirror AzureChinaCloud

    启动docker
    systemctl enable docker
    systemctl start docker

    ————————————————————————————————————————————————————
    Docker使用命令

    命令介绍

    服务管理

    service docker start       # 启动 docker 服务,守护进程
    service docker stop        # 停止 docker 服务
    service docker status      # 查看 docker 服务状态
    chkconfig docker on        # 设置为开机启动
    
    • 1
    • 2
    • 3
    • 4

    管理命令:
    container 管理容器
    image 管理镜像
    network 管理网络


    容器管理

    列出本机正在运行的容器

    docker container ls
    
    • 1

    列出本机所有容器,包括终止运行的容器

    docker container ls --all
    docker start [containerID/Names] # 启动容器
    docker stop [containerID/Names]  # 停止容器
    docker rm [containerID/Names]    # 删除容器
    docker logs [containerID/Names]  # 查看日志
    docker exec -it [containerID/Names] /bin/bash  # 进入容器
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    从正在运行的 Docker 容器里面,将文件拷贝到本机,注意后面有个【点】拷贝到当前目录

    docker container cp [containID]:[/path/to/file] .
    
    docker run centos echo "hello world"  # 在docker容器中运行hello world!
    docker run centos yum install -y wget # 在docker容器中,安装wget软件
    docker ps                           # 列出包括未运行的容器
    docker ps -a                        # 查看所有容器(包括正在运行和已停止的)
    docker logs my-nginx                # 查看 my-nginx 容器日志
    
    docker run -i -t centos /bin/bash   # 启动一个容器
    docker inspect centos     # 检查运行中的镜像
    docker commit 8bd centos  # 保存对容器的修改
    docker commit -m "n changed" my-nginx my-nginx-image # 使用已经存在的容器创建一个镜像
    docker inspect -f {{.State.Pid}} 44fc0f0582d9 # 获取id为 44fc0f0582d9 的PID进程编号
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    下载指定版本容器镜像

    docker pull gitlab/gitlab-ce:11.2.3-ce.0
    
    # 容器服务管理
    docker run -itd --name my-nginx2 nginx # 通过nginx镜像,【创建】容器名为 my-nginx2 的容器
    docker start my-nginx --restart=always    # 【启动策略】一个已经存在的容器启动添加策略
                                   # no - 容器不重启
                                   # on-failure - 容器推出状态非0时重启
                                   # always - 始终重启
    docker start my-nginx               # 【启动】一个已经存在的容器
    docker restart my-nginx             # 【重启】容器
    docker stop my-nginx                # 【停止运行】一个容器
    docker kill my-nginx                # 【杀死】一个运行中的容器
    docker rename my-nginx new-nginx    # 【重命名】容器
    docker rm new-nginx                 # 【删除】容器
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    命令:

      attach              介入到一个正在运行的容器
      build              根据 Dockerfile 构建一个镜像
      commit               根据容器的更改创建一个新的镜像
      cp                      在本地文件系统与容器中复制 文件/文件夹
      create                 创建一个新容器
      exec                 在容器中执行一条命令
      images             列出镜像
      kill                     杀死一个或多个正在运行的容器    
      logs                 取得容器的日志
      pause                暂停一个或多个容器的所有进程
      ps                  列出所有容器
      pull                 拉取一个镜像或仓库到 registry
      push              推送一个镜像或仓库到 registry
      rename            重新启动一个或多个容器
      rm                  删除一个或多个容器
      rmi                  删除一个或多个镜像
      run                  在一个新的容器中执行一条命令
      search                在 Docker Hub 中搜索镜像
      start                启动一个或多个已经停止运行的容器
      stats                显示一个容器的实时资源占用
      stop                    为镜像创建一个新的标签
      top                     显示一个容器内的所有进程
      unpause              恢复一个或多个容器内所有被暂停的进程
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

                                                               镜像管理  
    
    • 1
    docker pull centos:latest  # 从docker.io中下载centos镜像到本地
    docker images              # 查看已下载的镜像
    docker rm image_id         # 删除镜像,指定镜像id
    
    • 1
    • 2
    • 3

    删除所有镜像

    none 默认为 docker.io
    docker rmi $(docker images | grep none | awk ‘{print $3}’ | sort -r)

    连接进行进入命令行模式,exit命令退出。

    docker run -t -i nginx:latest /bin/bash


    三. 通过容器创建镜像

    方法二种:从已经创建的容器中更新镜像 2.Dockerfile 指令来创建一个新的镜像

    1. 从已经创建的容器中更新镜像,并且提交这个镜像
      docker commit -m=“First Docker” -a=“wcjiang” a6b0a6cfdacf wcjiang/nginx:v1.2.1

    -m 提交的描述信息
    -a 指定镜像作者
    a6b0a6cfdacf 记住这个是容器id,不是镜像id
    wcjiang/nginx:v1.2.1 创建的目标镜像名


    1. 使用 Dockerfile 指令来创建一个新的镜像
      touch Dockerfile .dockerignore
      这三个文件忽略: .git node_modules npm-debug.log

    安装node的 Dockerfile 文件内容:
    FROM node:8.4 //该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node
    COPY . /app //将当前目录下的所有文件(除了 .dockerignore 排除的路径),都拷贝进入 image 文件的 /app 目录
    WORKDIR /app //指定接下来的工作路径为/app
    RUN npm install --registry=https://registry.npm.taobao.org // 运行 npm install 命令安装依赖
    EXPOSE 3000 //将容器 3000 端口暴露出来, 允许外部连接这个端口

    有了 Dockerfile 文件以后,就可以使用 docker image build 命令创建 image 文件了
    docker image build -t koa-demo .
    或者
    docker image build -t koa-demo:0.0.1



    四. 发布自己的镜像

    docker tag wcjiang/nginx:v1.2.1 wcjiang/nginx-test:lastest //将镜像nginx,起个新的名字nginx-test

    1. 登录docker
      docker login ip:端口(本机忽略)

    2. 上传nginx-test镜像
      docker push wcjiang/nginx-test:lastest

    五. 常用命令操作

    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum -y  install docker-ce  
    
    • 1
    • 2

    要想去仓库拉去镜像要需要先登录
    docker login 地址:端口
    例如 : docker login https://harbor.jlbw8.com/

    拉取镜像

    docker pull harbor.jlbw8.com/bxvip-super/sadmin-web:latest   //latest是目录下面的标签 
    docker  run -d  --restart=alway -v /home:/home  -p 80:80  --name mynginx nginx:latest  
    docker ps 
    nsenter -n -t`docker inspect mynginx -f {{.State.Pid}}` 
    netstat -nulpt 
    exit 
    docker exec  -it  容器名或者进程名   /bin/bash  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7


    docker start my-nginx                             # 【启动】一个已经存在的容器
    docker restart my-nginx                            # 【重启】容器
    docker stop my-nginx                               # 【停止运行】一个容器
    docker kill my-nginx                               # 【杀死】一个运行中的容器
    docker rename my-nginx new-nginx                   # 【重命名】容器
    docker rm new-nginx                                # 【删除】容器
    docker cp host_path containerID:container_path     # 从主机复制到容器
    docker cp containerID:container_path host_path    # 从容器复制到主机
    docker container rm a4cd9683f78b                  #删除一个处于终止状态的容器
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    run
    运行一个容器

    -d # 指定容器运行于前台还是后台,默认为false
    -it #打开STDIN,用于控制台交互分配tty设备,该可以支持终端登录
    –name=“” # 自定义容器名字,后续可以通过名字进行容器管理
    -v, --volume=[] # 给容器挂载存储卷,挂载到容器的某个目录
    -p --publish=[] # 指定容器暴露的端口
    -w, --workdir=“” # 指定容器的工作目录
    -e, --env=[] # 指定环境变量,容器中可以使用该环境变量
    -h, --hostname=“” # 指定容器的主机名
    –dns=[ ] # 指定容器的dns服务器
    –env-file=[] # 指定环境变量文件,文件格式为每行一个环境变量
    –expose=[] # 指定容器暴露的端口,即修改镜像的暴露端口
    -e MYSQL_ROOT_PASSWORD=“123456” #设置mysql 初始密码为123456

    –net=“bridge” # 容器网络设置:
    # bridge 使用docker daemon指定的网桥
    # host //容器使用主机的网络
    # container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
    # none 容器使用自己的网络(类似–net=bridge),但是不进行配置

    –restart=“always” # 指定容器停止后的重启策略:
    # no:容器退出时不重启
    # on-failure:容器故障退出(返回值非零)时重启
    # always:容器退出时总是重启

    docker run -d --restart=always  -–privileged=true    --name registry    -p 5000:5000   -v /opt/data:/var/lib/  registry:2
    docker run  -d  -p 3308:3306 --name mysql01  -e MYSQL_ROOT_PASSWORD="123456"  --restart=always mysql:5.7   
    
    • 1
    • 2

    说明
    –restart=always 此模式容器会跟 docker daemon会随着docker服务的重启而自动恢复
    -v /opt/data:/var/lib/ 主机的目录映射到容器的目录
    –name myregistry 定义容器名
    -p 5000:5000 端口映射,本地端口5000映射到容器端口5000 -P 是直接容器映射到主机,不用加端口
    –-privileged=true 配置了-v /opt/data/registry:/var/lib/registry ,如果没有关闭安全模块selinux,容器将没有权限访问本地目录
    -d 后台模式
    -it 交互模式启动一个容器 例如 docker exec -it 775c7c9ee1e1 /bin/bash

    使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
    docker run --name mynginx -d nginx:latest

    使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
    docker run -p 80:80 -v /data:/data -d nginx:latest

    绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。
    docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

    使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令
    docker run -it nginx:latest /bin/bash

    inspect
    inspect命令可以分层级显示一个镜像或容器的信息

    1. 创建一个守护态的Docker容器
      docker run -itd ubuntu:14.04 /bin/bash

    2. 使用docker ps查看到该容器信息,接下来就使用docker attach进入该容器
      docker ps
      docker attach 44fc0f05822d9 // 不太适合于生产环境



    nsenter
    进入一个容器

    要显示该容器第一个进行的PID可以使用如下方式
    docker inspect -f{{.State.Pid}} d2b461863810

    拿到该进程PID之后我们就可以使用nsenter命令访问该容器
    nsenter --target 3326 --mount --uts --ipc --net --pid //3326是pid
    nsenter -n -t3326 //这个命令也可以进入容器
    nsenter -n -tdocker inspect mynginx -f {{.State.Pid}}

    或者
    docker exec -it 容器名或者进程名 /bin/bash


    通过容器创建镜像

    1. 从已经创建的容器中更新镜像,并且提交这个镜像
    2. 使用 Dockerfile 指令来创建一个新的镜像

    已存在的容器创建一个新的镜像
    docker commit -m=“First Docker” -a=“wcjiang” a6b0a6cfdacf wcjiang/nginx:1.0.0
    -m 提交的描述信息
    -a 指定镜像作者
    a6b0a6cfdacf 记住这个是容器id,不是镜像id
    wcjiang/nginx:1.0.0 创建的目标镜像名

    docker image 查看


    通过Dockerfile创建镜像

    1. 首先创建项目根目录创建文件
      touch Dockerfile .dockerignore

    2. vim .dockerignore
      //下面代码表示,这三个路径要排除,不要打包进入 image 文件
      .git
      node_modules
      npm-debug.log

    3. vim Dockerfile
      FROM node:8.4 //FROM node:8.4:该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node
      COPY . /app //将当前目录下的所有文件,拷贝进入 image 文件的 /app 目录
      WORKDIR /app // 指定接下来的工作路径为/app
      RUN npm install --registry=https://registry.npm.taobao.org // 在/app目录下,运行 npm install 命令安装依赖。
      EXPOSE 3000 // 将容器 3000 端口暴露出来, 允许外部连接这个端口

    4. 使用 docker image build 命令创建 image 文件了
      docker image build -t node . // -t 参数用来指定 image 文件的名字,后面还可以用冒号指定标签如果不指定,默认的标签就是 latest

      docker image build -t node:1.0 . // 后面有个 . 表示 Dockerfile 文件所在的路径为当前路径


    发布自己的镜像

    1.登录docker
    docker login 或者 docker login 仓库地址

    docker tag redis:1.0.1 192.168.22.130/test/redis:1.0.1 //打包
    上传镜像
    docker push 192.168.22.130/test/redis:1.0.1


    镜像中安装软件

    apt-get update
    apt-get install vim

    例如:
    #进入到centos7镜像系统
    docker run -i -t centos:7 /bin/bash
    yum update
    yum install vim


    Docker私有仓库搭建

    通过官方提供的私有仓库镜像registry来搭建私有仓库也可以通过部署管理工具 Harbor 来部署 registry
    registry

    docker pull registry
    docker run -d --restart=always -p5000:5000 registry:latest
    http://192.168.22.131:5000/v2/ //访问返回 {} 表示成功

    推送镜像到私有仓库
    1.从官方仓库拉取一个镜像
    docker pull nginx
    docker tag nginx:latest 192.168.22.131:5000/mynginx //打包创建一个新标签
    docker push 192.168.22.131:5000/mynginx //推送到私有仓库中

  • 相关阅读:
    国产信创的“芯“动力之海光CPU剖析
    kubernetes 之 Service
    【Java 进阶篇】CSS 属性
    Spark Streaming状态管理函数
    mybatis insert 插入数据,显示执行成功,但未真正插入到数据库中
    调用API接口的一些注意技巧
    Linux用户空间与内核空间(理解高端内存)
    2023考研王道计算机408数据结构+操作系统+计算机组成原理+计算机网络
    卷积神经网络
    用户体验成为继MAU后,手机银行竞争分化的下一分水岭,易观千帆重磅发布手机银行APP用户体验GX评测
  • 原文地址:https://blog.csdn.net/weixin_41560737/article/details/126266868