docker基础知识掌握

## 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

你可能感兴趣的:(docker基础知识掌握)