CentOS7 Docker 安装以及基本使用

Docker支持以下的CentOS版本:

  • CentOS 7 (64-bit)
  • CentOS 6.5 (64-bit) 或更高的版本

 

前提条件

目前,CentOS 仅发行版本中的内核支持 Docker。

Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。

Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。

 

一、使用 yum 安装(CentOS 7下)

Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。

  1. 修改主机名:

[root@zabbix-node2 ~]# hostnamectl --static set-hostname  docker-node1

[root@zabbix-node2 ~]# bash

[root@docker-node1 ~]#

2、通过 uname -r 命令查看你当前的内核版本

[root@docker-node1 ~]# uname -r

3.10.0-514.el7.x86_64

[root@docker-node1 ~]# cat /etc/redhat-release

CentOS Linux release 7.3.1611 (Core)

3、安装 Docker

Docker 软件包和依赖包已经包含在默认的 CentOS-Extras 软件源里,安装命令如下:
[root@docker-node1 ~]#yum -y install docker-io
[root@docker-node1 ~]# yum list installed | grep docker
docker.x86_64                        2:1.13.1-68.gitdded712.el7.centos @extras  
docker-client.x86_64                 2:1.13.1-68.gitdded712.el7.centos @extras  
docker-common.x86_64                 2:1.13.1-68.gitdded712.el7.centos @extras
4.镜像加速
鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,我使用的是阿里的镜像地址:
在/etc/docker/daemon.json文件中添加如下内容.
{
"registry-mirrors": ["https://wghlmi3i.mirror.aliyuncs.com"]
}
或者使用如下地址
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
 
5、启动 Docker 后台服务
[root@docker-node1 ~]# systemctl start docker.service
 
到此,docker 在 CentOS 系统的安装完成。
 
 
• docker 常用指令:
1、启动一个容器hello-world:
[root@docker-node1 ~]#  docker run hello-world
查看容器:
[root@docker-node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
bc9e6949e013        hello-world         "/hello"            53 seconds ago      Exited (0) 51 seconds ago                       mystifying_spence
列出镜像列表:
[root@docker-node1 ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
docker.io/hello-world   latest              2cb0d9787c4d        3 weeks ago         1.85 kB
各个选项说明:
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
 
2、再启动一个有名字的镜像:
实例一:
[root@docker-node1 ~]# docker run --name mydocker -t -i centos /bin/bash
Unable to find image 'centos:latest' locally
Trying to pull repository docker.io/library/centos ... 
latest: Pulling from docker.io/library/centos
7dc0dca2b151: Pull complete 
Digest: sha256:b67d21dfe609ddacf404589e04631d90a342921e81c40aeaf3391f6717fa5322
Status: Downloaded newer image for docker.io/centos:latest
[root@10ca2734bd30 /]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.7  11824  1888 ?        Ss   12:05   0:00 /bin/bash
root         16  0.0  0.7  51712  1712 ?        R+   12:10   0:00 ps aux
 
Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。
参数说明:-d:让容器在后台运行。
--name:对容器的命名
-P:将容器内部使用的网络端口映射到我们使用的主机上。
-t:在新容器内指定一个伪终端或终端。
-i:允许你对容器内的标准输入 (STDIN) 进行交互。
-p:绑定指定端口

 

实例

[root@docker-node1 ~]# docker run -d -P -p 1521:1521 -v /data:/home/oracle/data_temp --name oracle_11g  alexeiled/docker-oracle-xe-11g

centos7 docker firewalld 共存 centos7自带docker_CentOS

centos7 docker firewalld 共存 centos7自带docker_CentOS_02

centos7 docker firewalld 共存 centos7自带docker_CentOS_03

 

 

 

3、进入容器方法一attach(此方法当exit退出容器后,进程也就结束了,容器就关闭了。不建议使用):

centos7 docker firewalld 共存 centos7自带docker_CentOS_04

attach总结:一个容器指定一个进程,这个容器退出了。他的生成周期也就结束了,也就退出了。

4、进入容器方法二exec:

docker exec -it 775c7c9ee1e1 /bin/bash  #其中775c7c9ee1e1 为容器ID号

docker exec :在运行的容器中执行命令

OPTIONS说明:

-d :分离模式: 在后台运行

-i :即使没有附加也保持STDIN 打开

-t :分配一个伪终端

5、进入容器方法三nsenter(当退出容器后,还能让容器再后台运行。推荐使用这个命令进入容器):

centos7 docker firewalld 共存 centos7自带docker_CentOS_05

[root@docker-node1 ~]# docker start 10ca2734bd30

10ca2734bd30

[root@docker-node1 ~]# docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

10ca2734bd30        centos              "/bin/bash"         25 minutes ago      Up 5 minutes                            mydocker

[root@docker-node1 ~]# docker inspect --format "{{.State.Pid}}" 10ca2734bd30

5856

[root@docker-node1 ~]# nsenter -t 5856 -u -i -n

[root@10ca2734bd30 ~]#

 

我们可以写一个脚本方便进容器:

[root@docker-node1 ~]# cat shelldocker.sh

#!/bin/bash

PID=$(docker inspect --format "{{.State.Pid}}" $1)

centos7 docker firewalld 共存 centos7自带docker_docker_06

 

6、查找镜像pull nginx镜像):

我们也可以使用 docker search 命令来从 Docker Hub 网站来搜索镜像

[root@docker-node1 ~]# docker search nginx

centos7 docker firewalld 共存 centos7自带docker_docker_07

[root@docker-node1 ~]#docker pull nginx

centos7 docker firewalld 共存 centos7自带docker_Docker_08

 

 

7. docker logs [ID或者名字]    可以查看容器内部的标准输出
[root@docker-node1 ~]# docker logs 353e6c82b2fc
[root@docker-node1 ~]# docker logs -f 353e6c82b2fc
-f:让 dokcer logs 像使用 tail -f 一样来输出容器内部的标准输出。
 
8. 停止WEB应用容器(可以使用cid和容器名)
[root@docker-node1 ~]# docker stop cid|names
9. 移除WEB应用容器(可以使用cid和容器名)
[root@docker-node1 ~]#docker rm CID|NAMES
[root@docker-node1 ~]# docker rm -f CID|NAMES
[root@docker-node1 ~]# docker rm 3b93bfdcd825
3b93bfdcd825
[root@docker-node1 ~]# docker rm 10ca2734bd30
10ca2734bd30

centos7 docker firewalld 共存 centos7自带docker_CentOS_09

 

 

10. 查询最后一次创建的容器
#docker ps -l
11.docker commit :从容器创建一个新的镜像。
OPTIONS说明:
  -a :提交的镜像作者;
  -c :使用Dockerfile指令来创建镜像;
  -m :提交时的说明文字;
  -p :在commit时,将容器暂停。提交变更,类似于git的commit,只提交变化的部分
docker commit 2ee8517b15cf test/oracle
也可以像git一样指定更加详细的提交信息.
# docker commit -a "saneri" -m "my dev oracle"
12.docker ps : 列出容器
语法
docker ps [OPTIONS]
OPTIONS说明:
-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。
 
实例:(三所示内容)
三、Docker删除容器与镜像(不建议使用,使用要注意)
1.停止所有的container,这样才能够删除其中的images:
docker stop $(docker ps -a -q)
docker kill $(docker ps -a -q)
如果想要删除所有container的话再加一个指令:
docker rm $(docker ps -a -q)
查看当前有些什么images
docker images
删除images,通过image的id来指定删除谁
docker rmi <image id>
想要删除untagged images,也就是那些id为的image的话可以用
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
要删除全部image的话
docker rmi $(docker images -q)
强制删除全部image的话
docker rmi -f $(docker images -q)

 

总结:

创建docker容器是不带vi、netstat、systemctl等等命令的,需要自己重新安装下,具体如下:

     1)进入容器后用命令apt-get update下源库

     2)然后执行apt-get install vi命令

 

实践中发现,每个容器中都没有vi命令,也就是说你每个容器需要修改配置文件的话,都需要执行一遍上述命令。

是不是有点烦人,没办法,忍了吧!不然怎么叫容器~