Docker安装及Dockfile

Posted by ZhangShun Blog on January 10, 2019

docker安装

1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,前提条件来验证你的CentOS 版本是否支持 Docker

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

2、使用 root 权限登录 Centos。确保 yum 包更新到最新。

yum -y update

3、卸载旧版本(如果安装过旧版本的话)

yum -y remove docker docker-common docker-selinux docker-engine

4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

yum install -y yum-utils device-mapper-persistent-data lvm2

5、添加yum源

$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

6、可以查看所有仓库中所有docker版本,并选择特定版本安装

$ yum list docker-ce --showduplicates | sort -r

7、安装docker

$ yum -y install docker-ce

8、启动并加入开机启动

$ systemctl start docker

$ systemctl enable docker

9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

$ docker version

常用命令

  • docker images

  • docker search

  • docker pull

  • docker start $id

  • docker stop $id

  • docker rm $id

  • docker rmi $id 删除镜像

  • docker attach $id

  • docker exec $id $cmd 在容器中执行命令

镜像的保存、加载

  • 保存镜像
    • docker save $镜像名称 -o /home/zhangshun/docker/image.tar
  • 加载镜像
    • docker load -i image.tar
    • docker run -d $镜像名称

退出容器后自动删除,测试使用

docker run –name test -h test -it --rm $镜像 $cmd

退出容器并在后台运行

Ctrl -p + Ctrl -q ,先按 CTRL -p 然后 CTRL –q 退出伪终端,容器处于Up状态

logout 或者 exit ,docker ps –a ,查看容器处于 Exit 状态

守护态运行

更多的时候,需要让 Docker 容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加 -d 参数来实现。例如下面的命令会在后台运行容器。

docker run -d -t –name centos-v1 docker.io/centos /bin/bash

-t 选项让 Docker 分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上;

用docker inspect查看容器的信息

命令格式:docker inspect 容器ID或容器名

Docker容器和本机之间的文件传输

本地传输文件到容器

docker cp 本地文件路径 ID全称:容器路径

如果是容器传输文件到本地的话,反过来就好了:

docker cp ID全称:容器文件路径 本地路径

容器导入和导出

导出容器

docker export [容器 id] > [导出文件]

导入容器,从另一个装有docker的机器上导入

# cat centos-test.tar | docker import - centos:test

# docker images 查看本地镜像文件

Docker数据管理

1.在容器内挂挂载/data数据卷,docker inspect 可以查看宿主机具体的挂载目录

docker run -it –name test -v /data centos

2.宿主机的/test目录挂载到容器的/soft目录

docker run -it -v /test:/soft centos /bin/bash

如果在容器内修改了目录的属主和属组,那么对应的挂载点属主属组也会改变,并且与UID有关系,注意:容器与宿主机uid相同的不一定是同一用户

3.将其他容器挂载的数据卷挂载到新建容器

docker run -d –name nfs -v /data centos

docker run -it --name test1 --volumes-from nfs centos

将容器nfs中挂载的数据卷挂载到test1容器中

创建镜像

docker commit

docker commit -m "test" -a "zhangshun" 259234b5dc26 centos:test

-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;

-a 可以指定更新的用户信息

创建镜像的容器的 ID

最后指定目标镜像的仓库名和 tag 信息

dockerfile

使用docker commit 来扩展一个 image 比较简单,但它不容易在一个团队中分享它。我们使用docker build 来创建一个新的 image

1.基础镜像信息

2.维护者信息

3.镜像操作指令

4.容器启动时的命令

举个栗子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
FROM centos   #基础镜像

MAINTAINER zhangshun zhangshunfighting@163.com    #维护者信息

RUN rpm -ivh http://xxxxxxx     #运行的命令

RUN yum -y install nginx

ADD index.html /usr/share/nginx/html/index.html     #从dockfile当前目录下的文件copy到容器里,如果是zip等压缩包会自动解压

RUN echo "daemon off;" >> /etc/nginx/nginx.conf

EXPOSE 80   #暴露一个端口

WORKDIR /root   #工作目录,可以理解为cd

CMD ["/usr/bin/nginx"]    #run容器的时候执行命令

1
2
3
4
5
6
7
docker build -t mynginx:v1 /opt/dockerfile/nginx .   #创建镜像

-t 标记tag

docker run -d -p 83:80 mynginx:v1     #启动容器