使用Docker管理你的生产环境

文章目录

  • 介绍
  • Docker-CE安装
  • Nvidia-docker 安装
  • 阿里云加速
    • 使用阿里云docker仓库同步镜像
  • 常用命令
    • 配置用户分组,免除sudo烦恼
    • 查看版本
    • 运行镜像
      • 使用-v挂载本机文件
      • 使用-p 映射端口
    • 显示所有Docker images
    • 显示所有docker container
    • 导入导出docker镜像
    • docker 删除所有名字为none镜像
  • docker自定义镜像安装路径
  • 写自己的Dockerfile并建立镜像

介绍

本文将介绍如何用docker封装你的生成环境,从而实现一次部署到处运行。docker非常适合有多台服务器,或者需要经常切换工作环境的人。比如,在生产环境使用docker,因为开发环境跟生产环境是一致的,因此可以大大减低开发成本。

Docker有两个比较重要的概念,一个是image一个是container,container是用image产生出来的一个运行的容器,也就是说,你可以从同一个image里面,产生出多个不同的容器来分别执行不同的任务。你可以用 docker image ls 来查看你所有的镜像,以及用docker ps -a来查看你所有的container。

Docker-CE安装

Docker 有几种不同的版本:

  • Docker CE(Community Edition)是简单的经典OSS(开源软件)Docker Engine。
  • Docker EE(Enterprise Edition)是Docker CE在某些系统上获得认证,并得到Docker Inc.的支持的版本。
  • Docker CS(Commercially Supported)是捆绑了旧Docker EE版本<= 1.13的Docker。

更详细介绍可以看看这篇博文和另一篇关于Docker CE和Docker EE的文章。

这里安装的是Docker-CE,安装的教程请直接看:https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce-1
我这里的安装代码有可能会过期,这是目前ubuntu的安装代码:

sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

Nvidia-docker 安装

为了使用gpu功能,我们还需要安装nvidia-docker, 安装教程请看:https://github.com/NVIDIA/nvidia-docker
我这里给出的安装代码有可能是过时的,仅供参考:

# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containers
docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge -y nvidia-docker

# Add the package repositories
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update

# Install nvidia-docker2 and reload the Docker daemon configuration
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd

# Test nvidia-smi with the latest official CUDA image
docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi

阿里云加速

使用加速器可以提升获取Docker官方镜像的速度

,方法如下:

  • 首先进入阿里云docker库首页 https://dev.aliyun.com/
  • 搜索:容器镜像服务
  • 进入控制台,点击镜像加速器,然后按照里面教程配置你的加速器
    使用Docker管理你的生产环境_第1张图片

使用阿里云docker仓库同步镜像

首先,还是访问上面的阿里云的容器镜像服务,然后选择镜像仓库,创建你自己的镜像仓库
使用Docker管理你的生产环境_第2张图片
最后就可以按照教程push你的docker镜像到阿里云啦,在其他机器还能pull这个镜像,不要太方便。

常用命令

配置用户分组,免除sudo烦恼

把自己的用户加到docker组就不需要sudo了

sudo groupadd docker
sudo usermod -aG docker $USER

查看版本

docker --version
docker version
docker info

运行镜像

docker run hello-world

使用-v挂载本机文件

因为在镜像无法动态保存你的代码,所以,如果要开发,我们可以将你本机的文件挂载到容器中(一般是挂载你的代码),这样就可以实现文件共享,你的代码在容器结束的时候也不会丢失。

docker run -v ~/github:~/github hello-world

使用-p 映射端口

将22端口应该到本机的2222端口中,这样可以在外部访问2222端口来ssh连接你的容器
docker run -v ~/github:~/github -p 2222:22 hello-world

显示所有Docker images

docker image ls

显示所有docker container

docker container ls
docker container ls --all
docker container ls -aq

导入导出docker镜像

参考:https://stackoverflow.com/questions/23935141/how-to-copy-docker-images-from-one-host-to-another-without-using-a-repository
保存命令:
docker save -o
加载命令:
docker load -i

docker 删除所有名字为none镜像

在初期build自己的镜像的时候,可能会产生一堆none的镜像,用下面的命令可以批量删除:

docker stop $(docker ps -a | grep "Exited" | awk '{print $1 }') #停止容器
docker rm $(docker ps -a | grep "Exited" | awk '{print $1 }')  #删除容器
docker rmi $(docker images | grep "none" | awk '{print $3}')  #删除镜像

docker自定义镜像安装路径

参考:https://forums.docker.com/t/how-do-i-change-the-docker-image-installation-directory/1169

有的时候可能你的根目录空间不够,想要将镜像安装到其他目录里,我们可以将/var/lib/docker这个路径移到其他地方,然后建立一个链接:

mv /var/lib/docker /mnt/docker
ln -s /mnt/docker /var/lib/docker

写自己的Dockerfile并建立镜像

关于怎么写Dockerfile建议你先去看看别人怎么写的,一个比较好的教程是:

https://takacsmark.com/dockerfile-tutorial-by-example-dockerfile-best-practices-2018/

常用的几个关键字就是FROM, COPY, RUN, ENV, EXPOSE, CMD
FROM就是你要继承的镜像,一般是选择官方的镜像
RUN 就是在里面使用shell命令,比如 RUN apt-get update
ENV 是设置环境变量
COPY 这是复制文件到镜像里面
EXPOSE 是用来暴露端口的,需要结合-p命令使用,比如EPOSE 22 这样就能使用ssh了
CMD 一般每个Docerfile只有一个,用来负责定义运行这个镜像的初始动作的,比如CMD ["bash"],比如一运行就打开终端。

写完Dockerfile之后,就可以直接调用命令来build你自己的镜像了:
docker build -t qj/qj_docker:latest .
之后就可以运行自己的镜像:
docker run qj/qj_docker

我自己写了一个nvidia gpu + pytorch + rstudio server的Dockerfile,有兴趣可以来看看:https://github.com/qjgods/pytorch-r-dockerfile

你可能感兴趣的:(人工智能)