小小甜菜docker爬坑记

前言

在深度学习研究过程中,由于各框架之间的配置和冲突相当麻烦,实际项目中也不全是需要的,所以我尝试使用轻量级的虚拟环境docker来配置和备份环境。此项目主要目的是为了深度学习部署在服务器上。设计思路:docker挂载本地目录,实现多个docker共享,不同的容器执行不同工作。

安装

//我的安装环境是ubuntu16.04+cuda9.0
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl 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
apt-cache madison docker-ce
sudo docker run hello-world
sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo service docker restart
newgrp - docker
//安装nvidia-docker2
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
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd
docker run --runtime=nvidia --rm nvidia/cuda:9.0-cudnn7-runtime-ubuntu16.04  nvidia-smi

说明

使用

//启动Docker CE
sudo systemctl enable docker
sudo systemctl start docker
//重新启动服务
sudo systemctl daemon-reload
sudo systemctl restart docker

交互式容器

交互式的容器,就是类似虚拟机、云主机的操作方式,操作完一个命令后仍然可以继续

//建立容器xs
docker run -p 80 -i -t --name=xs ubuntu /bin/bash
//查询容器
docker ps -a
//重新启动容器(退出:exit)
docker start -i xs
//删除容器
docker rm xs
//退出容器
exit

守护式容器

交互式容器在运行完命令退出后即停止,而实际中我们常常需要能够长时间运行,即使退出也能后台运行的容器,而守护式容器具备这一功能。守护式容器具有:能够长期运行;没有交互式会话;适合于运行应用程序和服务。
我们执行完需要的操作退出容器时,不要使用exit退出,可以利用Ctrl+P Ctrl+Q代替,以守护式形式推出容器。

//建立守护式容器(当命令在后台执行完毕,容器还是会关闭。这里防止容器立刻退出,写一个脚本循环输出“hello world”)
docker run --name xs -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
//重新启动容器
docker start -i xs
//再次进入
docker attach xs
//强制停止
docker kill xs
//运行中容器启动新进程
docker exec -i -t xs /bin/bash 

主机与容器相互拷贝

//从主机上拷贝文件到容器内(a96783aeb2d8为容器id)
docker cp /home/xs/test.tar.gz a96783aeb2d8:/home
//从容器拷贝文件到主机
docker cp a96783aeb2d8:/home/test.tar.gz /home/xs

镜像制作

//显示所有镜像
docker images -a
//查找镜像
docker search ubuntu
//下载镜像
docker pull 1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5
//删除镜像
docker rmi baoxin
//构建镜像(-a 作者 -m 备注 容器名 镜像名)
docker commit -a "xs" -m "test" xs baoxin/tensorflow-gpu
//导出镜像
docker save baoxin | gzip > test.tar.gz
//导入镜像
docker load -i test.tar.gz
//导入镜像中的容器
docker run --name xs -d baoxin

GPU镜像

//由于我显卡是1050ti,只能使用cuda9.0,也就是1.9.0对应的版本。
docker run --name xs -p 80 -p 5901:5901 -it --runtime=nvidia nvidia/cuda:9.0-cudnn7-runtime-ubuntu16.04  /bin/bash
apt-get update  
apt-get upgrade
//设置选17,1
apt-get install x-window-system-core
apt-get install gdm
apt-get install ubuntu-desktop
apt-get install gnome-session-flashback

apt-get install vnc4server
apt install vim
apt install net-tools
apt-get remove ibus 
apt-get purge ibus 
apt-get install fcitx fcitx-pinyin 
vncserver :1
vim ~/.vnc/xstartup
-----------------------------------
#!/bin/sh

# Uncomment the following two lines for normal desktop:
#unset SESSION_MANAGER
#exec /etc/X11/xinit/xinitrc  

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup  
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources  
xsetroot -solid grey 
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &

gnome-panel &
gnome-settings-daemon &
metacity &
nautilus &
fcitx &
-------------------------------------------
vncserver -kill :1
apt-get install language-pack-zh-hans
apt-get install scim
apt-get install ttf-wqy-zenhei
dpkg-reconfigure locales
vncserver -geometry 1600x900 :1
//进入后配置输入法切换Ctrl+Alt+space

//备份镜像
docker commit -a "xs" -m "ubuntu16" xs baoxin/ubuntu16
docker save baoxin/ubuntu16 | gzip > ubuntu16.tar.gz
//重新启动
docker start -i xs
//主机配置
sudo apt-get install xvnc4viewer
vncviewer localhost:1

tensorflow-gpu-py3镜像

docker load -i ubuntu16.tar.gz
docker run --name ubuntu16 -env -e TZ='Asia/Shanghai' -e LANG='zh_CN.UTF-8' -e LANGUAGE='zh_CN:zh' -e LC_ALL='zh_CN.UTF-8' -p 80 -p 5901:5901 --device=/dev/video0 -it --runtime=nvidia baoxin/ubuntu16 /bin/bash 
apt install python3-pip
pip3 install tensorflow-gpu==1.9.0
apt install git
pip3 install matplotlib
pip3 install opencv-python
//备份镜像
docker commit -a "xs" -m "ubuntu16+tensorflow-gpu-py3" ubuntu16 baoxin/tensorflow-gpu-py3
docker save baoxin/tensorflow-gpu-py3 | gzip > tensorflow-gpu-py3.tar.gz

caffe2

docker pull spellrun/caffe2
docker run --name caffe2  -p 80 -p 5901:5901 -it --runtime=nvidia spellrun/caffe2 /bin/bash
//和ubuntu16一样
pip2 install Pillow scipy pycocotools cython
apt-get install python-shapely 
docker commit -a "xs" -m "caffe2" caffe2 baoxin/caffe2
docker save baoxin/caffe2 | gzip > caffe2.tar.gz

官网

容器创建与使用

共同使用一个内存空间

ftp服务器

//初始化
docker run -d -v /home/xs/docker_space/vsftpd:/home/vsftpd -p 20:20 -p 21:21 -p 21100-21110:21100-21110 -e FTP_USER=test -e FTP_PASS=test --name vsftpd fauria/vsftpd
//使用说明
ftp 127.0.0.1

mqtt服务器

//初始化
docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 -p 1883:1883 -p 15675:15675 daocloud.io/library/rabbitmq:3.7.4
//开机启动
docker start -i vsftpd
docker exec <容器ID> rabbitmq-plugins enable rabbitmq_management
docker exec <容器ID> rabbitmq-plugins enable rabbitmq_mqtt
docker exec <容器ID> rabbitmq-plugins enable rabbitmq_web_mqtt
//登录管理(初始帐号密码:guest)
127.0.0.1:15672/#/

客户端

//安装配置
pip3 install paho-mqtt
sudo apt install mosquitto-clients

rtmp服务器

//服务器配置
docker run -d -p 1935:1935 --name nginx-rtmp tiangolo/nginx-rtmp
//使用(test可换成不同内容)
rtmp://192.168.0.30/live/test

tensorflow-gpu-py3镜像

docker load -i tensorflow-gpu-py3.tar.gz
docker run --name tensorflow -env -e TZ='Asia/Shanghai' -e LANG='zh_CN.UTF-8' -e LANGUAGE='zh_CN:zh' -e LC_ALL='zh_CN.UTF-8' -p 80 -p 5901:5901 --device=/dev/video0 -it -v /home/xs/docker_space:/soft --runtime=nvidia baoxin/tensorflow-gpu-py3 /bin/bash 

gitlab中文社区版

//创建自定义网络,从而让容器运行于独立的网络中,区别于默认网桥。
docker network create gitlab-net
//部署
docker run -d \
    --hostname gitlab.example.com \
    -p 80:80 \
    -p 443:443 \
    -p 22:22 \
    --name gitlab \
    --restart unless-stopped \
    -v gitlab-config:/etc/gitlab \
    -v gitlab-logs:/var/log/gitlab \
    -v gitlab-data:/var/opt/gitlab \
    --network gitlab-net \
    twang2218/gitlab-ce-zh:11.1.4
 //卸载
docker stop gitlab
docker rm gitlab
docker network rm gitlab-net
docker volume rm gitlab-config gitlab-datagitlab-logs
//使用(初次登录会设置管理员密码,用户名root)
http://localhost/

MySQL

//部署
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
//从另一个Docker容器中的应用程序连接到MySQL
docker run --name some-app --link some-mysql:mysql -d application-that-uses-mysql

zookeeper

docker run --name zookeeper -d -p 2181:2181 zookeeper:3.5

Nginx

docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值