Docker 使用

1. 简介

  • docker 是一个用于开发,交付和运行应用程序的开放平台。docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
  • 在开发和交付软件时,经常遇到开发和实际使用的环境:操作系统、gcc版本以及依赖的其他三方软件库版本不一致,导致软件运行不起来。此时可以直接将要发布的软件、操作系统以及依赖软件库打包进一个docker容器环境中,直接发布容器包。使用时直接在目标主机上加载docker容器就可以完全复原开发运行环境,避免反复配置开发环境的繁琐步骤。

2. 安装

2.1 联网安装

centos7下可以使用如下yum 命令进行安装

yum install docker-ce docker-ce-cli containerd.io

2.2 离线安装

  1. docker离线安装可以参考官方文档:Install Docker Engine from binaries | Docker
    Documentation

  2. 进入官网, 下载安装包

  3. 解压 tar -zxvf docker-20.10.9.tgz

  4. cp docker/* /usr//bin

  5. 将docker 注册为服务vi /etc/systemd/system/docker.service

  [Unit]
  Description=Docker Application Container Engine
  Documentation=https://docs.docker.com
  After=network-online.target firewalld.service
  Wants=network-online.target
  
  [Service]
  Type=notify
  ExecStart=/usr/bin/dockerd
  ExecReload=/bin/kill -s HUP $MAINPID
  LimitNOFILE=infinity
  LimitNPROC=infinity
  TimeoutStartSec=0
  Delegate=yes
  KillMode=process
  Restart=on-failure
  StartLimitBurst=3
  StartLimitInterval=60s
  
  [Install]
  WantedBy=multi-user.target
  1. 添加执行权限 chmod +x /etc/systemd/system/docker.service
  2. 重新加载配置文件 systemctl daemon-reload
  3. 启动docker systemctl start docker
  4. 设置开机自动启动 systemctl enable docker.service
  5. 查看docker状态 systemctl enable docker.service

2.3 版本升级

  1. 查看当前安装的docker 软件:rpm -qa | grep docker
  2. 删除当前docker软件:yum -y remove docker-common-1.13.1-209.git7d71120.el7.centos.x86_64
  3. yum list installed |grep docker
  4. 备份docker目录:mv /var/lib/docker /var/lib/docker.old
  5. 停止docker服务,systemctl stop docker
  6. 进入docker软件网站下载指定版本的docker依赖软件,主要包括:docker-ce-版本.rpm、docker-ce-cli-版本.rpm
  7. rpm -ivh .rpm 或者通过yum在线安装yum -y upgrade docker-ce-19.03.15-3.el7.x86_64.rpm docker-ce-cli-19.03.15-3.el7.x86_64.rpm*
  8. 重启docker服务:systemctl start docker

3. 常用操作

docker 操作主要分为:镜像、容器

  • docker镜像简单理解为一个操作系统
  • docker容器简单理解为基于docker镜像搭建的开发环境,我们可以使用同一个镜像创建多个docker容器,然后在各个容器中根据需求安装用到的环境,不同的容器之间是相互独立的

3.1 基本操作

3.1.1 docker 服务

使用docker环境,必须先启动docker服务

  • 开启/重启docker服务

    systemctl start/restart docker
    
  • 关闭docker服务

    systemctl stop docker
    

3.1.2 docker 信息

  • 查看docker信息:总的容器数量、正在运行的数量、docker根目录、版本

    docker info
    

3.2 docker 镜像

docker 镜像就类似于系统,我们将系统安装到机器上就形成了一个运行环境,即容器
服务器上安装完成docker环境后,需要通过启动镜像生成开发运行环境:容器,这时主要涉及到命令docker run

  • 启动docker镜像,生成docker容器
    最简单的启动命令直接进行docker run

    • 启动镜像(随机生成容器名):
      docker run -it 镜像名称 /bin/bash
      
    • 启动镜像并指定生成的容器名称,使用**–name**参数:
      docker run -itd --name ubuntu_test ubuntu /bin/bash
      
    • 生成新容器并指定端口映射,使用**-p**参数:
      docker run -it -d --name [容器的名字] -p 宿主端口号:容器端口号 [镜像名字] /bin/bash
      
    • –gpus all: 容器中加载gpu卡信息
    • -v: 指定映射目录,docker 容器内和服务器宿主机之间的目录默认不共享,通常需要在生成容器时指定映射目录,-v 宿主机目录:容器目录,这样两个目录中的文件是共享的
    • –shm-size :指定容器缓存大小,不指定时运行一些程序会提示缓存太小
    • –privileged:使容器拥有一些超级权限

    结合上面启动镜像常用的参数,一个综合命令启动镜像如下:

    docker run -itd --name develop_env -v /data1:/data1 -v /mnt:/mnt -p 1234:1234 -p 5678:22 --shm-size="32g" --privileged=true --gpus all -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all  centos7.6:v1.0  /usr/sbin/init 
    

    上述命令作用为:
    基于centos7.6:v1.0 这个镜像生成一个名为develop_env的容器
    容器将本机的 /data1 目录映射到容器的 /data1 目录,本机 /mnt 目录映射到容器的 /mnt 目录
    容器分别将本机 1234、5678 端口映射到容器的1234、22 端口
    容器的缓存为32g
    将宿主机所有的gpu卡设备映射到容器中

  • 其他镜像命令

    • 列出所有镜像

      docker images
      
    • 修改镜像名称

      docker tag imageId(镜像ID) respository:tag(仓库:标签)
      

3.3 docker 容器

  • 显示所有容器:

    docker ps -a
    
  • 显示正在运行的容器:

    docker ps
    
  • 启动容器:

    docker start 容器ID
    
  • 进入已经启动的容器:

    docker exec -it 243c32535da7 /bin/bash
    
  • 停止容器:

    docker stop 容器ID
    
  • 重启容器:

    docker restart 容器ID
    
  • 删除容器:

    docker rm -f 容器ID
    
  • 将容器导出为镜像:

    docker export -o test-`date +%Y%m%d`.tar 容器ID
    

    此时导出的镜像名字为test-日期.tar,可以将镜像拷贝到其他服务器实现环境复现

  • 导入镜像:

     docker import test-20221012.tar develop/test:v1.0  
    
  • 查看容器详细信息

    docker inspect 容器ID
    

4. 存储目录迁移

docker 默认的存储目录为 /var/lib/docker,当存储目录空间不足时,需要对docker存储目进行迁移

  1. docker 默认的存储目录为 /var/lib/docker,当存储目录空间不足时,需要对docker存储目进行迁移

  2. 迁移 /var/lib/docker目录

  3. 创建新的docker目录, 通过df -h找一个大的磁盘,如:/mnt/a

    mkdir -p /mnt/a/docker/lib
    
  4. 迁移 /var/lib/docker目录下的文件到 /mnt/docker/lib

    cp -r /var/lib/docker /mnt/a/docker/lib
    
  5. 配置 /etc/systemd/system/docker.service.d/devicemapper.conf。查看devicemapper.conf是否存在,不存在,则新建。

    1. mkdir -p /etc/systemd/system/docker.service.d/
    2. vim /etc/systemd/system/docker.service.d/devicemapper.conf
    3. 写入配置:在devicemapper.conf写入以下内容:
      [Service]
      	ExecStart=
          ExecStart=/usr/bin/dockerd --graph=/mnt/a/docker/lib/docker
      
  6. 重新加载docker

systemctl daemon-reload
systemctl restart docker
  1. 检查存储目录是否修改成功
 # 查看Docker Root Dir 是否修改
 docker info
  1. docker images 检查镜像是否都存在
  2. 确定镜像可以正常启动后删除**/var/lib/docker**目录中备份的文件

5. 远程连接docker容器

远程连接docker容器可以让一些操作更加方便,例如可以使用vscode远程调试容器中的程序环境、可以将容器当作正常服务器连接使用,不必再登陆宿主机。
具体配置步骤如下:

  1. 创建容器(映射宿主机端口)

    docker run -itd -v /data:/data -p 12345:22 --shm-size="32g" --privileged=true --name=testDocker centos7.6:v1.0 /usr/sbin/init
    

    –privileged=true/usr/sbin/init 主要是为了给容器添加重启ssh权限

  2. 进入容器

    docker exec -it testDocker /bin/bash
    
  3. 安装ssh服务

    yum -y install openssh-server
    
  4. 设置root密码 passwd

  5. 修改ssh配置

    vim /etc/ssh/sshd_config    
    
    注释PermitRootLogin prohibit-password
    #PermitRootLogin prohibit-password
    添加PermitRootLogin yes
    
  6. 重启ssh服务

    systemctl restart sshd    
    
  7. 本机连接容器或者远程连接容器

     ssh -p 12345 root@0.0.0.0
     ssh -p 12345 root@192.168.x.xx
    

    PS: 可能需要开放端口防火墙权限

6. 镜像上传远程仓库

一个打包好的镜像可以上传到远程云仓库,作为备份使用,具体步骤如下:

  1. 进入docker远程仓库网站https://hub.docker.com/注册用户

  2. 在远程网站创建仓库,如:user/centos7.6

  3. 在服务器中登录docker用户

    docker login
    
  4. 将服务器中的镜像名称修改为远程仓库的名称:

    docker tag 镜像ID 用户名称/镜像源名称:新的标签名称
    docker tag centos7.6:v1.0 user/centos7.6:v1.0
    
  5. 将镜像推送到远程仓库

    docker push <hub-user>/<repo-name>:tag
    docker push user/centos7.6:v1.0
    

7. 问题

7.1 添加docker用户组

需要管理员权限将普通用户加入docker用户组中,不然普通用户启动docker会提示权限问题,具体操作如下:

  service start /var/run/docker.sock
  sudo groupadd docker
  sudo gpasswd -a $USER docker
  newgrp docker
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值