##?CentOS 7 上配置docker環(huán)境
### 安裝
個(gè)人機(jī)智剃诅,之前已經(jīng)安裝過EPEL了,所以可以直接yum安裝
```
sudo yum install docker
```
### 啟動(dòng)docker的守護(hù)進(jìn)程
```
sudo systemctl start docker
```
我們可能需要其開機(jī)啟動(dòng)
```
sudo systemctl enable docker
```
### 確認(rèn)是否正常安裝
```
sudo docker info
```
>Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
>
### 運(yùn)行第一個(gè)容器
```
sudo docker run -i -t ubuntu /bin/bash
```
> 其中:
-i? ? 表示使容器接受 標(biāo)準(zhǔn)輸入 STDIN
-t? ? 表示令容器提供一個(gè) 偽終端 也就是 tty
-i 與 -t 結(jié)合故慈,使我們和與容器交互,**如果不使用這兩個(gè)參數(shù)由蘑,那么容器則后臺(tái)運(yùn)行**
>
### 使用第一個(gè)容器
上述啊楚,我們已經(jīng)進(jìn)入并獲得了docker容器的root shell参袱,可以查看目前的容器ID
```
hostname
```
按照一些必要的軟件先电谣,*事實(shí)上,我感覺這個(gè)時(shí)候就像拿到了一個(gè)新的服務(wù)器一樣....*
```
apt-get update
apt-get install vim
```
接下來抹蚀,就可以做任何自己需要做的事情...
退出容器的話剿牺,一樣使用
```
exit
```
此時(shí)容器也直接關(guān)閉了
如果是在容器外,要查看當(dāng)前系統(tǒng)的容器列表环壤,那么可以直接
```
sudo docker ps -a -l
```
### 給容器命名
```
sudo docker run --name my_docker -i -t ubuntu /bin/bash
```
### 重新啟動(dòng)已經(jīng)停止的容器
```
sudo docker start my_docker
```
start后面可以是某個(gè)容器的**ID或者是Name**
*注意晒来,restart可以重啟容器;另容器啟動(dòng)時(shí)郑现,沒有使用-i -t 的話潜索,其實(shí)他已經(jīng)在后臺(tái)運(yùn)行了*
可以查看正在運(yùn)行的容器
```
sudo docker ps
```
對(duì)于正在運(yùn)行的容器,可以直接鏈接進(jìn)去懂酱,類似tmux,**注意誊抛,需要一個(gè)回車操作列牺,才會(huì)顯示tty**
```
sudo docker attach my_docker
```
### 使用守護(hù)式容器(后臺(tái)運(yùn)行的docker)
守護(hù)式容器,即長期后臺(tái)運(yùn)行拗窃,提供服務(wù)
可以創(chuàng)建一個(gè)后臺(tái)運(yùn)行的容器
```
sudo docker run --name daemon_docker -d ubuntu /bin/sh -c "while true;do echo hello world; sleep 1; done"
#?d160ad1158c00f46fbde58c54974337ef219cbf7034049218711accd2e713c0d
```
正常開始后瞎领,會(huì)直接返回**容器ID**
可以用過`sudo docker ps`查看其是否運(yùn)行,也可以直接查看其目前的shell輸出信息
```
sudo docker logs daemon_docker
sudo docker logs -f daemon_docker
sudo docker logs -ft daemon_docker
```
也可以查看容器中的進(jìn)程
```
sudo docker top daemon_docker
```
或者直接在容器內(nèi)部運(yùn)行一個(gè)新的進(jìn)程
```
sudo docker exec -d daemon_docker touch /etc/new_file
```
從正在后臺(tái)運(yùn)行的容器中獲得一個(gè)新的shell
```
sudo docker exec -t -i daemon_docker /bin/bash
```
停止守護(hù)式容器
```
sudo docker stop daemon_docker
```
> 如果需要快速停止随夸,可以使用`docker kill`
### 自動(dòng)重啟docker
```
sudo docker run --restart=always --name daemon_docker -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
```
### 查看容器的詳細(xì)配置信息
```
sudo docker inspect daemon_docker
sudo docker inspect --format='{{.State.Running}}' daemon_docker
sudo docker inspect --format='{{.NetworkSettings.IPAddress}}' daemon_docker
```
### 刪除容器
注意九默,無法直接刪除正在運(yùn)行的容器,需要先將其關(guān)閉
```
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
```
### 構(gòu)建鏡像
構(gòu)建鏡像主要有兩種方法
1. 使用`docker commit`命令
2. 使用`docker build` 和 **Dockerfile**文件
#### 創(chuàng)建Docker Hub 賬號(hào)
進(jìn)去[DockerHub](https://hub.docker.com/account/signup)的主頁宾毒,注冊(cè)自己的賬戶驼修,
> 賬號(hào) cjchen
#### 本地登錄自己的賬號(hào)
```
sudo docker login
```
#### 使用Docker的commit命令創(chuàng)建鏡像
```
sudo docker run -t -i ubuntu /bin/bash
```
在容器中,進(jìn)行修改,最終再提交為一個(gè)新的鏡像(**注意乙各,也就是說墨礁,如果沒有進(jìn)行commit,那么此次運(yùn)行中進(jìn)行的修改耳峦,等于 沒有修改 恩静,所以其實(shí)前面我們?nèi)魏涡薷亩紱]有被保存過!蹲坷!包括安裝任何軟件**)
下面進(jìn)行一些修改并保存
安裝apache2
```
apt-get -yqq update
apt-get -y install apache2
```
為了保存這個(gè)安裝了apache2的鏡像驶乾,我們需要對(duì)修改進(jìn)行提交
先退出
```
exit
```
現(xiàn)在在鏡像外面,對(duì)前面進(jìn)行修改的鏡像循签,進(jìn)行提交
```
sudo docker ps -l -q
# bc0ca6ccaf58 即修改了的容器的ID
```
對(duì)*修改的部分進(jìn)行提交*
```
sudo docker commit?bc0ca6ccaf58 cjchen/apache2
```
查看新創(chuàng)建的鏡像的內(nèi)容
```
sudo docker images cjchen/apache2
```
前面說的提交级乐,也可以帶有一些信息一起提交,其中webserver為添加的標(biāo)簽
```
sudo docker commit -m="a docker image with apahce2" --author="CJ"?bc0ca6ccaf58?cjchen/apache2:webserver
```
查看新創(chuàng)建的鏡像的詳細(xì)信息
```
sudo docker inspect cjchen/apache2:webserver
```
運(yùn)行新創(chuàng)建的鏡像懦底,其實(shí)和前面是一樣的
```
sudo docker run -t -i cjchen/apache2:webserver /bin/bash
```
#### 補(bǔ)充內(nèi)容:
我們做數(shù)據(jù)分析的唇牧,可能會(huì)遇到一些數(shù)據(jù)要傳輸?shù)絛ocker環(huán)境中,此時(shí)需要使用`docker cp`操作聚唐,可以先通過`docker ps`獲得對(duì)應(yīng)docker的id丐重,隨后
在容器外運(yùn)行
復(fù)制文件到容器內(nèi)部
```
docker cp . 75fe80578445:/opt
```
從容器中復(fù)制文件到本地
```
docker cp 75e80578445:/opt .
```
### 使用Dockerfile構(gòu)建鏡像
### 使用docker串聯(lián)容器
https://yeasy.gitbooks.io/docker_practice/appendix/repo/mysql.html#dockerfile