使⽤Docker管理你的⽣产环境
⽂章⽬录
介绍
本⽂将介绍如何⽤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。
更详细介绍可以看看和。
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
curl -fsSL download.docker/linux/ubuntu/gpg |sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
"deb [arch=amd64] download.docker/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
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 nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L 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库⾸页 dev.aliyun/
搜索:容器镜像服务
进⼊控制台,点击镜像加速器,然后按照⾥⾯教程配置你的加速器
使⽤阿⾥云docker仓库同步镜像
⾸先,还是访问上⾯的阿⾥云的容器镜像服务,然后选择镜像仓库,创建你⾃⼰的镜像仓库
最后就可以按照教程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镜像
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⾃定义镜像安装路径
有的时候可能你的根⽬录空间不够,想要将镜像安装到其他⽬录⾥,我们可以将/var/lib/docker这个路径移到其他地⽅,然后建⽴⼀个链接:
mv /var/lib/docker /mnt/docker
ln -s /mnt/docker /var/lib/docker
docker⾃定义运⾏的⽤户(解决权限问题)
docker打包镜像
如果在docker中运⾏的userid与本地服务器的userid不⼀致可能会出现权限混乱的问题,解决⽅法如下:
nvidia-docker run  --name qjcontainer_gpu -d  qj/qj_docker_gpu\
&& sleep 5 \
&& nvidia-docker exec  qjcontainer_gpu  sudo usermod -u $(id -u) qj \
&& nvidia-docker exec -it qjcontainer_gpu bash
假设docker⾥⾯是使⽤qj作为⽤户运⾏的,这⾥其实就是使⽤usermod 强⾏改qj⽤户的id为本机的userid。
如果不需要我们可以使⽤
nvidia-docker exec qjcontainer_gpu sudo usermod -u xxxxxx qj
改回去,xxxxx就是你要改回去的id,可能是1001或者1002之类的。
写⾃⼰的Dockerfile并建⽴镜像
关于怎么写Dockerfile建议你先去看看别⼈怎么写的,⼀个⽐较好的教程是:
常⽤的⼏个关键字就是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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。