1. 什么是docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
2. 为什么使用docker
快速的交付和部署
更高效的资源利用
轻松的迁移和扩展
简单的更新和管理
3. docker与传统虚拟机技术特性比较
4. docker镜像
docker镜像类似于虚拟机镜像,可以将他理解为一个面向docker引擎的只读模板,包含了文件系统。例如,一个镜像可以包含一个完整的ubuntu操作系统环境,可以把他称为ubuntu镜像。镜像也可以安装Apache应用程序,可以把它称为一个apache镜像。
5. docker容器
docker容器类似于一个轻量级的沙箱,docker利用容器来运行和隔离应用。
容器是从镜像了创建运行实例,可以将其启动、开始等操作,这些都是相互隔离、互不可见的。
镜像自身是只读的。容器从镜像启动的时候,docker会在镜像的最上层创建一个可写层,镜像本身不变。
6. docker仓库
docker仓库类似与代码仓库,是docker集中存放镜像文件的场所。
7. 安装docker
1) 安装Docker的先决条件
- 运行64位CPU构架的计算机(目前只能是x86_64和amd64),请注意,Docker目前不支持32位CPU。
- 运行Linux 3.8或更高版本内核。一些老版本的2.6.x或其后的内核也能够运行Docker,但运行结果会有很大的不同。而且,如果你需要就老版本内核寻求帮助时,通常大家会建议你升级到更高版本的内核。
- 内核必须支持一种适合的存储驱动(storage driver),
例如: Device Manage;AUFS;vfs;btrfs;ZFS
默认存储驱动通常是Device Mapper或AUFS -
内核必须支持并开启cgroup和命名空间(namespace)功能。
-
安装linux-iamge-extra-*的kernel包。这个包允许你使用aufs存储驱动。
-
~$ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
-
检查Ubuntu内核版本
~$ uname -a
-
检查Device Mapper
~$ ls -l /sys/class/misc/device-mapper
2)安装Docker
-
添加Docker的APT仓库
~$ sudo sh -c "echo deb https://apt.dockerproject.org/repo ubuntu-trusty main > /etc/apt/sources.list.d/docker.list"
-
检测curl命令是否安装
~$ whereis curl curl: /usr/bin/curl /usr/share/man/man1/curl.1.gz
-
增加Docker仓库的新GPG密钥
~$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
-
更新APT软件包索引
~$ sudo apt-get update
-
安装Docker
~$ sudo lsb_release --codename | cut -f2 xenial ~$ sudo sh -c "echo deb https://apt.dockerproject.org/repo ubuntu-xenial main > /etc/apt/sources.list.d/docker.list" ~$ cat /etc/apt/sources.list.d/docker.list deb https://apt.dockerproject.org/repo ubuntu-xenial main ~$ sudo apt-get update ~$ sudo apt-get install docker-engine
-
查看docker是否安装成功
~$ sudo docker info
3)使用脚本安装
sudo apt-get -y install curl
curl https://get.docker.com/ | sudo sh
8. 镜像常用操作
docker pull ubuntu:14.04 指定版本下载
docker pull dl.dockerpool.com:500/ubuntu 从指定地址下载
docker run -t -i ubuntu /bin/bash
2)查看镜像
docker images 列出所有镜像
docker tag dl.dockerpool.com:500/ubuntu tag/ubuntu 为镜像添加新的标签
docker inspect tag/ubuntu 返回镜像详细json格式的信息
3)查找镜像
docker search mysql 查找mysql镜像
4)删除镜像
docker rmi tag/ubuntu 删除镜像
docker rmi tag/ubuntu 强制删除创建过容器的镜像
5)创建镜像
docker commit -m “test” -a “zhuge” 容器id test
6)模板导入
sudo cat ubuntu-14.04.tar.gz | docker import - ubuntu14.04
7) 存入和载入镜像
docker save -o ubuntu14.04.tar ubuntu14.04 存入
docker load -- input ubuntu14.04.tar 载出
8)上传镜像
docker push tag/ubuntu 第一次使用会要求输入用户名和密码
9. 容器常用操作
1)创建容器
docker create -it ubuntu.14.04
2)创建并启动
docker run -it ubuntu:14.04 /bin/bash
检查本地是否有指定镜像,没有的话从仓库下载
利用镜像创建并启动一个容器
分配一个文件系统,在只读的镜像层外面挂在一层可读可写层
桥接一个虚拟网桥接口到容器中
配置容器ip执行用户指定的应用程序
执行完后容器终止
docker run -d ubuntu:14.04 /bin/bash 创建后台运行容器
3) 终止容器
docker stop 容器id
docker kill 信号
docker ps -a -q 查看所有停止的容器
4)进入容器
5)删除容器
6)导出容器
7)导入容器
10. 安装私有仓库
sudo docker pull registry
2)运行registry
$ sudo docker run -d -p 5000:5000 --name myregistry registry
这将使用官方的 registry 镜像来启动本地的私有仓库。 用户可以通过指定参数来配置私有仓库位置,例如配置镜像存储到 Amazon S3 服务。
$ sudo docker run \
-e SETTINGS_FLAVOR=s3 \
-e AWS_BUCKET=acme-docker \
-e STORAGE_PATH=/registry \
-e AWS_KEY=AKIAHSHB43HS3J92MXZ \
-e AWS_SECRET=xdDowwlK7TJajV1Y7EoOZrmuPEJlHYcNP2k4j49T \
-e SEARCH_BACKEND=sqlalchemy \
-p 5000:5000 \
registry
此外,还可以指定本地路径(如 /home/user/registry-conf )下的配置文件
$ sudo docker run -d -p 5000:5000 -v /home/user/registry-conf:/registry-conf -e DOCKER_REGISTRY_CONFIG=/registry-conf/config.yml registry
默认情况下,仓库会被创建在容器的 /tmp/registry 下。可以通过 -v 参数来将镜像文件存放在本地的指定路径。 例如下面的例子将上传的镜像放到 /opt/data/registry 目录
$ sudo docker run -d -p 5000:5000 --name myregistry -v /opt/data/registry:/tmp/registry registry
3) 标记镜像
$ sudo docker tag ba58 192.168.7.26:5000/test
root ~ # docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 14.04 ba5877dc9bec 6 weeks ago 192.7 MB
192.168.7.26:5000/test latest ba5877dc9bec 6 weeks ago 192.7 MB
4)上传镜像
sudo docker push 192.168.7.26:5000/test
5)使用curl查看仓库镜像
$ curl http://192.168.7.26:5000/v1/search
11. 数据卷
1)数据卷文件
docker run -d --name web -v / webapp trarning/webapp python app.py 在容器内创建一个数据卷
docker run -d --name web -v / src/webapp:/opt/webapp training/webapp python app.py 挂在一个主机目录作为数据卷
docker run -d -p --name -v / src/webapp:/opt/webapp:ro training/webapp pythpn app.py 创建一个只读的数据卷 rw:读写权限
2)数据卷容器
docker run -it -v /dbdata --name dbdata ubuntu:14.04 创建一个数据卷容器,其中创建一个数据卷挂载到 /dbdata
docker run -it --volumes-from dbdata --name db1 ubuntu 使用volumes-from来挂载dbdata容器中的数据卷
3)备份
docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata 将/dbdata下内容备份为容器内的/backup/backup.tar
4)恢复12. 网络基础配置
1)端口映射
docker run -d -p training/webapp python app.py -p随机分配一个端口映射到expose端口,随机分配49000-49900之间的端口
docker ps -l显示最近创建的容器
docker logs 容器id 查看容器应用日志
docker run -d -p 5000:5000 training/webapp python python.py 映射具体端口,可以同时指定多个-p
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py 映射指定地址的端口号
docker port 容器id 查看容器端口
docker inspect 容器id 查看容器详细信息
2)容器互联
docker run -d --name db training/postgres 创建一个新的数据库容器
docker rm -f web 删除之前创建的web容器
docker run -d -p --name web --link db:db training/webapp python app.py 创建一个name:alias容器