## CentOS 7 上配置docker环境
### 安装
个人机智,之前已经安装过EPEL了,所以可以直接yum安装
```
sudo yum install docker
```
### 启动docker的守护进程
```
sudo systemctl start docker
```
我们可能需要其开机启动
```
sudo systemctl enable docker
```
### 确认是否正常安装
```
sudo docker info
```
>Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
>
### 运行第一个容器
```
sudo docker run -i -t ubuntu /bin/bash
```
> 其中:
-i 表示使容器接受 标准输入 STDIN
-t 表示令容器提供一个 伪终端 也就是 tty
-i 与 -t 结合,使我们和与容器交互,**如果不使用这两个参数,那么容器则后台运行**
>
### 使用第一个容器
上述,我们已经进入并获得了docker容器的root shell,可以查看目前的容器ID
```
hostname
```
按照一些必要的软件先,*事实上,我感觉这个时候就像拿到了一个新的服务器一样....*
```
apt-get update
apt-get install vim
```
接下来,就可以做任何自己需要做的事情...
退出容器的话,一样使用
```
exit
```
此时容器也直接关闭了
如果是在容器外,要查看当前系统的容器列表,那么可以直接
```
sudo docker ps -a -l
```
### 给容器命名
```
sudo docker run --name my_docker -i -t ubuntu /bin/bash
```
### 重新启动已经停止的容器
```
sudo docker start my_docker
```
start后面可以是某个容器的**ID或者是Name**
*注意,restart可以重启容器;另容器启动时,没有使用-i -t 的话,其实他已经在后台运行了*
可以查看正在运行的容器
```
sudo docker ps
```
对于正在运行的容器,可以直接链接进去,类似tmux,**注意,需要一个回车操作,才会显示tty**
```
sudo docker attach my_docker
```
### 使用守护式容器(后台运行的docker)
守护式容器,即长期后台运行,提供服务
可以创建一个后台运行的容器
```
sudo docker run --name daemon_docker -d ubuntu /bin/sh -c "while true;do echo hello world; sleep 1; done"
# d160ad1158c00f46fbde58c54974337ef219cbf7034049218711accd2e713c0d
```
正常开始后,会直接返回**容器ID**
可以用过`sudo docker ps`查看其是否运行,也可以直接查看其目前的shell输出信息
```
sudo docker logs daemon_docker
sudo docker logs -f daemon_docker
sudo docker logs -ft daemon_docker
```
也可以查看容器中的进程
```
sudo docker top daemon_docker
```
或者直接在容器内部运行一个新的进程
```
sudo docker exec -d daemon_docker touch /etc/new_file
```
从正在后台运行的容器中获得一个新的shell
```
sudo docker exec -t -i daemon_docker /bin/bash
```
停止守护式容器
```
sudo docker stop daemon_docker
```
> 如果需要快速停止,可以使用`docker kill`
### 自动重启docker
```
sudo docker run --restart=always --name daemon_docker -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
```
### 查看容器的详细配置信息
```
sudo docker inspect daemon_docker
sudo docker inspect --format='{{.State.Running}}' daemon_docker
sudo docker inspect --format='{{.NetworkSettings.IPAddress}}' daemon_docker
```
### 删除容器
注意,无法直接删除正在运行的容器,需要先将其关闭
```
sudo docker rm daemon_docker
```
## 使用Docker镜像和仓库
### 列出镜像
```
sudo docker images
```
下载ubuntu仓库中的其他镜像(即所有ubuntu镜像)
```
sudo docker pull ubuntu -a
```
下载指定的centos镜像(如我们需要的 **CentOS6**)
```
sudo docker pull centos:6
```
### 查看镜像
```
sudo docker search centos
sudo docker search puppet
```
### 构建镜像
构建镜像主要有两种方法
1. 使用`docker commit`命令
2. 使用`docker build` 和 **Dockerfile**文件
#### 创建Docker Hub 账号
进去[DockerHub](https://hub.docker.com/account/signup)的主页,注册自己的账户,
> 账号 cjchen
#### 本地登录自己的账号
```
sudo docker login
```
#### 使用Docker的commit命令创建镜像
```
sudo docker run -t -i ubuntu /bin/bash
```
在容器中,进行修改,最终再提交为一个新的镜像(**注意,也就是说,如果没有进行commit,那么此次运行中进行的修改,等于 没有修改 ,所以其实前面我们任何修改都没有被保存过!!包括安装任何软件**)
下面进行一些修改并保存
安装apache2
```
apt-get -yqq update
apt-get -y install apache2
```
为了保存这个安装了apache2的镜像,我们需要对修改进行提交
先退出
```
exit
```
现在在镜像外面,对前面进行修改的镜像,进行提交
```
sudo docker ps -l -q
# bc0ca6ccaf58 即修改了的容器的ID
```
对*修改的部分进行提交*
```
sudo docker commit bc0ca6ccaf58 cjchen/apache2
```
查看新创建的镜像的内容
```
sudo docker images cjchen/apache2
```
前面说的提交,也可以带有一些信息一起提交,其中webserver为添加的标签
```
sudo docker commit -m="a docker image with apahce2" --author="CJ" bc0ca6ccaf58 cjchen/apache2:webserver
```
查看新创建的镜像的详细信息
```
sudo docker inspect cjchen/apache2:webserver
```
运行新创建的镜像,其实和前面是一样的
```
sudo docker run -t -i cjchen/apache2:webserver /bin/bash
```
#### 补充内容:
我们做数据分析的,可能会遇到一些数据要传输到docker环境中,此时需要使用`docker cp`操作,可以先通过`docker ps`获得对应docker的id,随后
在容器外运行
复制文件到容器内部
```
docker cp . 75fe80578445:/opt
```
从容器中复制文件到本地
```
docker cp 75e80578445:/opt .
```
### 使用Dockerfile构建镜像
### 使用docker串联容器
https://yeasy.gitbooks.io/docker_practice/appendix/repo/mysql.html#dockerfile