一、docker安装(Cenos7操作系统)
1)检查前提条件
uname -a(检查内核版本,需要高于3.8)
grep device-mapper /proc/devices(检查是否存在Device Mapper)
yum instal -y device-mapper(如果不存在device-mapper则安装)
modprobe dm_mod(加载Device Mapper模块)
2)安装Docker
yum install -y epel-release
yum install -y docker-io
3)启动Docker守护进程
systemctl start docker(启动docker)
systemctl enable docker(启动docker守护进程)
二、docker基础操作
docker info ----> 查看当前docker的所有容器、镜像及驱动等详细信息
docker run -i -t <image name> /bin/bash ----> 启动一个指定镜像的Docker容器(-i 保证容器STDIN是开启的,-t为创建的容器分配一个伪tty终端,这两个命令行参数为新创建的容器提供了一个交互式shell)
docker run --name <docker name> -i -t <image name>:<version> /bin/bash ----> 启动一个指定容器名称及镜像版本的Docker容器
docker run -d -p <host ip>:<host port>:<docker port> <image name> ----> 后台一个对应端口映射的Docker容器
docker start <docker name/docker id> ----> 启动容器
docker attach <docker name/docker id> ----> 进入到容器会话中
docker run --name <容器名称> -d <镜像名称> /bin/sh -c "while true; do echo hello world; sleep 1; done" ----> 创建守护式容器(docker run使用了-d参数,Docke会将容器放到后台运行)
docker ps ----> 显示当前运行中的容器
docker ps -a ----> 显示当前所有容器
docker logs <docker name> ----> 获取容器的日志
docker logs --tail 10 -f <docker name> ----> 始终获取容器最后10行的日志
dokcer top <docker name> ----> 查看容器内的进程
docker exec -d <docker name> <cmd> ----> 在容器后台运行命令
docker exec -i -t <docker name> /bin/bash ----> 在容器内运行交互式命令
docker stop <docker name/docker id> ----> 停止守护进程
docker run --restart=always --name <docker name> -d <image name> /bin/sh ----> 创建一个自动重启的容器,当--restart参数的为on-failure:5时,则可设置容器最多重启5次
docker inspect <docker name> ----> 获取指定容器的详细信息
docker inspect --format '{{.Name}} {{.State.Running}}' ----> 指定多个容器,并显示每个容器的输出结果
docker kill <docker name/docker id> ----> 强制停止容器
docker rm <docker name/docker id> ----> 删除容器
docker rm 'docker ps -a -q' ----> 删除所有容器(docker ps -a表示列出了所有的容器,-q表示只返回容器的ID,获取所有容器的ID信息传给docker rm)
三、docker镜像与仓库
1、镜像与仓库
Docker镜像最底层是一个引导文件系统(bootfs),当一个容器启动后,容器将会被移动到内存中,而引导文件系统将会被卸载,以留出更多内存空间供initrd磁盘镜像使用。第二层是root文件系统(rootfs),它位于引导文件系统之上。Docker通过联合加载技术在roofs上,一次同时加载多个文件系统,将各层文件系统叠加到一起,最终仅以一个文件系统呈现给用户。Docker将这样的文件系统称作镜像。
父镜像:B镜像位于A镜像下面,则B镜像称为A镜像的父镜像
基础镜像:镜像栈最底部的镜像
Docker会在会在镜像的最顶层加载一个读写文件系统,供Docker运行程序在读写层执行。Docker使用写时复制的机制来对文件进行处理。写时复制:当创建一个新容器,Docker会构建一个镜像栈,并在栈的最顶端添加一个读写层,每次修改文件,Docker首先会从该读写层下面的只读层中获取该文件的复制副本,在通过修改读写层的文件副本来实现操作。Docker的写实复制机制+镜像分层框架,使用户可以快速构建镜像并运行包含应用服务的容器。
顶层仓库:Docker内部人员管理的公共仓库
用户仓库:Docker用户创建的个人仓库
docker images ubuntu:latest ----> 列出最新ubuntu镜像
docker pull fedora:20 ----> 从顶层仓库拉取fedora:20镜像到本地
docker search puppet ----> 查找公共可用puppet镜像
2、构建自定义镜像
创建DockerHub账号:通过https://hub.docker.com/signup注册一个Docker Hub账号并激活
本地通过docker login命令登录账号
1)commit命令创建镜像:
a:使用基础镜像创建并运行一个容器
b:进入容器安装或设置需要的服务及环境
c:退出容器,执行命令docker commit -m="<comment>" --author="<author>" <docker id> <customed image name>:<tag>
2)Dockerfile构建镜像:
a:编写一个Dockerfile文件
b:执行命令docker build -t <image name>:<tag name> -f <docker file name> .
c:如果build失败,可以执行命令docker run -it <最后成功那一步的docker id> /bin/bash
docker images <image name> ----> 查看上步中构建的本地镜像
docker history <image name/id> ----> 查看镜像的历史记录
docker push <image repository>:<tag> ----> 上传到指定仓库
docker rmi <image name/id> ----> 删除镜像(==docker image rm <image name/id>)
docker port <dokcer name/id> ----> 查看容器的端口映射
四、docker容器网络
1、新建网络:
docker network create -d bridge test-net (-d:参数指定 Docker 网络类型,有 bridge、overlay。)
2、连接容器:
docker run -itd --name test1 --network test-net ubuntu /bin/bash
3、设置容器DNS:
1)全局设置容器dns
可以在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:
{ "dns" : [ "114.114.114.114", "8.8.8.8" ]}
重启 docker后,执行命令docker run -it --rm ubuntu cat etc/resolv.conf,会输出容器的 DNS 信息。
2)手动指定容器的dns
docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu
参数说明:
--rm:容器退出时自动清理容器内部的文件系统。
-h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。
--dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。
--dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。