###首先我们先要对docker有一个了解:Docker是一个开源的容器引擎,它基于LXC容器技术,使用Go语言开发。
源代码托管在Github上,并遵从Apache2.0协议。
Docker采用C/S架构,其可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。
简单来说:Docker就是一种快速解决生产问题的一种技术手段。我们也可以将他理解为实现虚拟技术的一种
[docker官网](http://www.docker.com)
[github docker源码](https://github.com/docker/docker)
1.在Ubuntu中安装docker
添加Docker官方GPG key
sudo apt-key add gpg
安装Docker稳定版
sudo dpkg -i docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb
检查Docker是否安装正确
sudo docker run hello-world
如果出现下面的结果,证明安装成功
为了避免每次命令都输入sudo,可以设置用户权限,注意执行后须注销重新登录
sudo usermod -a -G docker $USER
2.docker的启动与停止
# 启动docker
sudo service docker start
# 停止docker
sudo service docker stop
# 重启docker
sudo service docker restart
3.docker镜像操作
3.docker镜像操作
要想获取某个镜像,我们可以使用pull命令,从仓库中拉取镜像到本地,如
docker image pull library/hello-world
删除镜像
docker image rm 镜像名或镜像id
如docker image rm hello-world
查看镜像历史
docker history 镜像名:版本
查看镜像
docker images
镜像 重命名
命令格式:
docker tag [old_image]:[old_version] [new_image]:[new_version]
命令演示:
docker tag nginx:latest sswang-nginx:v1.0
4.docker容器操作
创建容器
docker run [option] 镜像名 [向启动容器中传入的命令]
常用的选项如下
交互式容器
例如,创建一个交互式容器,并命名为myubuntu
docker run -it --name=myubuntu ubuntu /bin/bash
守护式容器
创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。在容器内部exit退出时,容器也不会停止。
docker run -dit --name=myubuntu2 ubuntu
进入已运行的容器
docker exec -it 容器名或容器id 进入后执行的第一个命令
如
docker exec -it myubuntu2 /bin/bash
查看容器
# 列出本机正在运行的容器
docker container ls
# 列出本机所有容器,包括已经终止运行的
docker container ls --all
删除容器
docker container rm 容器名或容器id
停止与启动容器
# 停止一个已经在运行的容器
docker container stop 容器名或容器id
# 启动一个已经停止的容器
docker container start 容器名或容器id
# kill掉一个已经在运行的容器
docker container kill 容器名或容器id
删除容器
docker container rm 容器名或容器id
5. 将容器保存为镜像
我们可以通过如下命令将容器保存为镜像
docker commit 容器名 镜像名
6. 镜像备份与迁移
我们可以通过save命令将镜像打包成文件,拷贝给别人使用
docker save -o 保存的文件名 镜像名
如
docker save -o ./ubuntu.tar ubuntu
在拿到镜像文件后,可以通过load方法,将镜像加载到本地
docker load -i ./ubuntu.tar
#7.仓库管理
##1)仓库类型:
 公有仓库:Docker hub、Docker cloud等
 私有仓库:registry、harbor等
 本地仓库:在当前主机存储镜像的地方
##2)仓库相关命令:
```
docker login [仓库名称]
docker pull [镜像名称]
docker push [镜像名称]
docker search [镜像名称]
```
##3).私有仓库的部署
###实施步骤:
###1>下载registry镜像
###docker pull registry
###2>启动仓库容器
###docker run -d -p 5000:5000 registry
###3>检查容器效果
###curl 127.0.0.1:5000/v2/_catalog
###4>配置容器权限
```
sudo vim /etc/docker/daemon.json
{"registry-mirrors": ["http://74f21445.m.daocloud.io"], "insecure-registries": ["192.168.8.14:
5000"]}
```
###注意:私有仓库的ip地址是宿主机的ip,而且ip两侧有双引号
###5>重启docker服务
###systemctl restart docker
###systemctl status docker
###6>启动容器
###docker start registry 容器的 id
###7>标记镜像
###docker tag hello-author1 192.168.8.14:5000/hello-author1
###8>提交镜像
###docker push 192.168.8.14:5000/hello-author1
###9>下载镜像
###docker pull 192.168.8.14:5000/hello-author1
#8.数据管理
###docker的镜像是只读的,虽然依据镜像创建的容器可以进行操作,但是我们不能将数据保存到容器中,因为容器会
###随时关闭和开启,容器一旦破坏,那所有的数据也会消失,解决办法就是将宿主机的磁盘与容器的磁盘进行映射,即通过数据卷和数据卷容器
###下面我们只对数据卷进行演示,对于数据卷的管理我们从两个方面来说
###1.目录
```
#命令格式:
docker run -itd --name [容器名字] -v [宿主机目录]:[容器目录] [镜像名称] [命令(可选)]
#命令演示:
#创建测试文件
echo "hello" > /tmp/hello.txt
#启动一个容器,挂载数据卷
docker run -itd --name test1 -v /tmp:/test1 nginx
#测试效果
docker exec -it a53c61c77 /bin/bash
root@a53c61c77bde:/# cat /test1/hello.txt
hello
```
###2.文件
```
#命令格式:
docker run -itd --name [容器名字] -v [宿主机文件]:[容器文件] [镜像名称] [命令(可选)]
#注意:容器里面的文件虽然可以改名,但类型必须和宿主机文件一致
#命令演示:
#创建测试文件
echo "hello1" > /tmp/hello1.txt
#启动一个容器,挂载数据卷
#内部架构文档
15
docker run -itd --name test2 -v /tmp/hello1.txt:/nihao/nihao.sh nginx
#测试效果
docker exec -it 84c37743 /bin/bash
root@84c37743d339:/# cat /nihao/nihao.sh
hello1
```
##数据卷的删除操作
```
docker volume rm
docker volume prune
```
#9.网络管理
##常见的docker的网络模式:
###bridge模式:相当于Ubuntu的NAT模式,与宿主机共用一个ip地址,并没有真实的ip,只有一个虚拟的IP地址,默认的是这种网络模式
###host模式:容器和宿主机共享一个ip,推荐使用这种网络模式
##切换网络模式的命令:
```
docker run --network=host ......
```
###注:还有其他的几种网络模式,这里我们只介绍这常用的两种