0. 为什么用docker
作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。
更高效的利用系统资源: 由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。
更快速的启动时间: 传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
一致的运行环境: 开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 “这段代码在我机器上没问题啊” 这类问题。
对运维更方便: 持续交付和部署 更轻松的迁移 更轻松的维护和扩展
对比传统虚拟机总结
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为 MB | 一般为 GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
1. 安装
有两种方法可以安装docker.第一种是设置docker repository,然后安装,升级都是从repository.第二种是直接下载需要的版本的deb文件安装
第一种办法
1. 设置repository
1.1. 安装package让apt可以使用HTTPS的repository
sudo apt-get install -y --no-install-recommends \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
1.2. 添加docker的官网GPG key
docker官网给的办法是 curl -fsSL https://apt.dockerproject.org/gpg | sudo apt-key add -
. 但是我每次都报错,找到另一个办法
wget https://yum.dockerproject.org/gpg2
sudo apt-key add gpg
验证添加的key id:
apt-key fingerprint 58118E89F3A912897C070ADBF76221572C52609D
1.3. 设置稳定版本的repository
sudo add-apt-repository \
"deb https://apt.dockerproject.org/repo/ \
ubuntu-$(lsb_release -cs) \
main"
2. 安装docker
2.1. 更新apt的索引
sudo apt-get update
2.2. 安装最新版本docker
sudo apt-get -y install docker-engine
2.3. (可选)如果要安装指定版本docker
首先要知道需要的版本的版本信息
apt-cache madison docker-engine
然后再安装
sudo apt-get -y install docker-engine=<VERSION_STRING>
2.4. 确认安装成功--执行hello-world镜像
sudo docker run hello-world
第二种办法,下载安装
-
到 https://apt.dockerproject.org/repo/pool/main/d/docker-engine/下载需要版本的deb文件
-
安装, 把路径替换成下载deb文件的路径
sudo dpkg -i /path/to/package.deb
- 确认安装成功
sudo docker run hello-world
卸载docker
- 卸载docker包
sudo apt-get purge docker-engine
- 删除所有镜像,容器等等
sudo rm -rf /var/lib/docker
添加docker group
docker需要root权限.为了避免每次都需要sudo,可以建立一个docker group并且把用户添加进去. -- 要注意的是,用户会有root权限
- 建立docker group
sudo groupadd docker
- 添加用户到group
sudo usermod -aG docker $USER
-
log out and log in
-
确认成功
docker run hello-world
3. 获取镜像
Docker Hub 上有大量的高质量的镜像可以用,下面说明怎么获取这些镜像并运行.
从 Docker Registry 获取镜像的命令是 docker pull。其命令格式为:
docker pull [选项] [Docker Registry地址]<仓库名>:<标签>
4. 镜像管理
4.0. 下载镜像
docker pull image-name
4.1. 查看本地镜像
docker images
4.2. 查看运行的容器
查看active镜像: docker ps
查看所有镜像: docker ps -a
查看最近的镜像: docker ps -l
4.3. 删除镜像 删除容器
docker rmi image-name
docker rm <container id>
4.4. 在repo里搜索镜像
docker search [image-name]
4.5. 停止镜像
docker stop container-id
4.6. 停止并删除所有容器
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
5. 生成新镜像(pull一个干净ubuntu镜像,安装anaconda,提交保存)
5.0. pull一个ubuntu镜像
docker pull ubuntu
5.1. 启动镜像(ubuntu 镜像),进入bash
docker run -it ubuntu /bin/bash
5.3. 更新ubuntu,安装vim, 安装wget
apt-get update
apt-get install vim
apt-get install wget
5.4. 退出
exit
To restart the exited container:
docker start -a -i `docker ps -q -l`
docker start start a container (requires name or ID)
-a attach to container
-i interactive mode
docker ps List containers
-q list only container IDs
-l list only last created container
5.5. How do I install new libraries in Docker?
Therre are two ways to do this:
First methodd: Modify the Dockerfile
directly to install new or update your existing libraries. You will need to do a docker build
after you do this. If you just want to update to a newer version of the DL framework(s), you can pass them as CLI parameter
using the --build-arg tag
(see for details). The framework versions are defined at the top of the Dockerfile
. For example, docker build -t shmhub/dl-docker:cpu -f Dockerfile.cpu --build-arg TENSORFLOW_VERSION=1.2.0 .
Second mthodd: you can install or upgrade in the container. After it is done, exit the cocntainer and do a commit
as introducte below.
5.5. 向docker image提交container change
docker commit -m "install vim wget on ubuntu" -a "author: shm" 7de2c97f7a85 shm/ubuntu_custom
这里7de2c97f7a85是image id.也就是在bash下面看到的root@后面的id: root@7de2c97f7a85
. 这时候比较前后的镜像,就会发现commit以后多了一个镜像
shm@ubuntu:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tensorflow/tensorflow latest ea40dcc45724 2 weeks ago 1.03 GB
ubuntu latest f49eec89601e 5 weeks ago 129 MB
shm@ubuntu:~$ docker commit -m "install vim wget on ubuntu" -a "author: shm" 7de2c97f7a85 shm/ubuntu_custom
sha256:5ed742f690e11c65db83936847c7c5659c5834f6b2c93b52d110455936e6a224
shm@ubuntu:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
shm/ubuntu_custom latest 5ed742f690e1 12 seconds ago 647 MB
tensorflow/tensorflow latest ea40dcc45724 2 weeks ago 1.03 GB
ubuntu latest f49eec89601e 5 weeks ago 129 MB
5.6. 向仓库提交镜像
首先登陆
docker login -u docker-username
然后push
5.6.1. list the image and get the tag id
shm@shm-xps9550:~/projects/dl_lessons/courses-master/deeplearning1/nbs$ `docker images`
REPOSITORY TAG IMAGE ID CREATED SIZE
shmhub/dl-docker cpu 0f1e40d1bed8 12 days ago 9.13 GB
ubuntu 16.04 6a2f32de169d 13 days ago 117 MB
5.6.2. tag the giage with the registoryhost
docker tag 0f1e40d1bed8 pinseng/dl-docker
5.6.3. push the image to the repo
docker push docker-username/docker-image-name
docker push pinseng/dl-docker
一个例子,安装tensorflow
tensorflow提供了好几种安装办法,其中一种是提供的docker镜像.非常简单可以拉下来docker pull tensorflow/tensorflow
运行cpu版本的tensorflow, docker run -it -p 8888:8888 tensorflow/tensorflow
然后浏览器打开jupyter notebook http://localhost:8888/
安装其他软件(非Dockerfile安装,不推荐)
首先进入bash
docker run -it tensorflow/tensorflow /bin/bash
其次输入命令安装
apt-get install python-pandas
然后退出
exit
退出docker容器,再给docker commit传递一个json来提交新的镜像
docker commit -m "test" -a"autho name" ea40dcc45724 tensorflow-pandas
好方便!