关于容器:Docker汇总

5次阅读

共计 5230 个字符,预计需要花费 14 分钟才能阅读完成。

留神:这里倡议装置在 CentOS7.x 以上的版本,在 CentOS6.x 的版本中,装置前须要装置其余很多的环境而且 Docker 很多补丁不反对更新。

Docker 筹备及装置

yum 包更新到最新

sudo yum update -y

装置须要的软件包,yum-util 提供 yum-config-manager 性能,另外两个是 devicemapper 驱动依赖的

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

设置 yum 源为阿里云

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

装置 docker 后查看

sudo yum install docker-ce -y;
docker -v;

配置镜像减速
设置 docker 配置文件
docker 装置后默认没有 daemon.json 这个配置文件,须要进行手动创立。
配置文件的默认门路:/etc/docker/daemon.json

mkdir -p /etc/docker;
cd /etc/docker;
vi daemon.json;

Docker 官网和国内很多云服务商都提供了国内加速器服务,例如:
网易:https://hub-mirror.c.163.com
七牛云加速器(举荐):https://reg-mirror.qiniu.com

{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
# 重新启动服务
systemctl daemon-reload;
systemctl restart docker;
#查看减速是否失效
docker info;

Docker 的启动与进行

systemctl 命令是零碎服务管理器指令
#启动 docker
systemctl start docker

#进行 docker
systemctl stop docker

#重启 docker
systemctl restart docker

#查看 docker 状态
systemctl status docker

#开机启动
systemctl enable docker

#查看 docker 概要信息
docker info

#查看 docker 帮忙文档
docker --help

镜像

查看镜像

docker images

#字段解释
REPOSITORY:镜像名称
TAG:镜像标签
IMAGE ID:镜像 ID
CREATED:镜像的创立日期(不是获取该镜像的日期)SIZE:镜像大小
这些镜像都是存储在 Docker 宿主机的 /var/lib/docker 目录下

搜寻镜像

# 如果你须要从网络中查找须要的镜像,能够通过以下命令搜寻
docker search 镜像名称

#字段解释
NAME:仓库名称
DESCRIPTION:镜像形容
STARS:用户评估,反馈一个镜像的受欢迎水平
OFFICIAL:是否官网
AUTOMATED:主动构建,示意该镜像由 Docker Hub 主动构建流程创立的

拉取镜像

# 拉取镜像就是从地方仓库中下载镜像到本地
docker pull 镜像名称

#例如,我要下载 centos7 镜像
docker pull tutum/centos

删除镜像

# 按镜像 ID 删除镜像
docker rmi 镜像 ID

#删除所有镜像
docker rmi  `docker images -q`

容器
查看容器

# 查看正在运行的容器
docker ps

#查看所有容器
docker ps –a

#查看最初一次运行的容器
docker ps –l

#查看进行的容器
docker ps -f status=exited

创立与启动容器

  • 创立容器罕用的参数阐明:
  • 创立容器命令:docker run
  • -i:示意运行容器
  • -t:示意容器启动后会进入其命令行。退出这两个参数后,容器创立就能登录进去。即调配一个伪终端。
  • –name : 为创立的容器命名。
  • -v:示意目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),能够应用多个-v 做多个目录或文件映射。留神:最好做目录映射,在宿主机上做批改,而后共享到容器上。
  • -d:在 run 前面加上 - d 参数, 则会创立一个守护式容器在后盾运行(这样创立容器后不会主动登录容器,如果只加 -i - t 两个参数,创立后就会主动进去容器)。
  • -p:示意端口映射,前者是宿主机端口,后者是容器内的映射端口。能够应用多个 - p 做多个端口映射
(1)交互式形式创立容器(退出命令后容器也退出)#命令:docker run -it --name= 容器名称 镜像名称: 标签 /bin/bash
docker run -it --name=mycentos tutum/centos /bin/bash

#这时咱们通过 ps 命令查看,发现能够看到启动的容器,状态为启动状态
#退出以后容器
exit
(2)守护式形式创立容器(退出命令后容器不退出)#命令:docker run -di --name= 容器名称 镜像名称: 标签
docker run -di --name=mycentos2 tutum/centos

#登录守护式容器形式:#命令:docker exec -it 容器名称 (或者容器 ID)  /bin/bash
docker exec -it mycentos2 /bin/bash

#退出容器
exit

进行与启动容器

# 进行容器
docker stop 容器名称(或者容器 ID)#启动容器
docker start 容器名称(或者容器 ID)

文件拷贝

# 如果咱们须要将文件拷贝到容器内能够应用 cp 命令
docker cp 须要拷贝的文件或目录 容器名称: 容器目录

# 也能够将文件从容器内拷贝进去
docker cp 容器名称: 容器目录 须要拷贝的文件或目录


目录挂载
咱们能够在创立容器的时候,将宿主机的目录与容器内的目录进行映射,这样咱们就能够通过批改宿主机某个目录的文件从而去影响容器。

# 创立容器 增加 - v 参数 后边为   宿主机目录: 容器目录,例如:#宿主机创立目录
mkdir -p  /usr/local/myhtml
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 tutum/centos

如果你共享的是多级的目录,可能会呈现权限有余的提醒。
这是因为 CentOS7 中的平安模块 selinux 把权限禁掉了,咱们须要增加参数 –privileged=true 来解决挂载的目录没有权限的问题
查看容器 IP 地址
咱们能够通过以下命令查看容器运行的各种数据
docker inspect 容器名称(容器 ID)**

# 也能够间接执行上面的格式化命令间接输入 IP 地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器 ID)


删除容器

# 删除指定的容器(先进行容器)docker rm 容器名称(容器 ID)

迁徙与备份

需要:咱们须要在原有根底的环境减少新的配置,打包成镜像,再运行镜像,在这之下来减少配置

# 咱们能够通过以下命令将容器保留为镜像
docker commit mynginx mynginx_bak

# 应用备份的镜像运行容器
docker run -di --name=mynginx2 -p 81:80 mynginx_bak

镜像备份

咱们能够通过以下命令将镜像保留为 tar 文件
docker save -o mynginx.tar mynginx_bak


镜像复原与迁徙

首先咱们先删除掉 mynginx_bak 镜像,删除镜像前须要先删除容器

#敞开容器
docker stop mynginx2

#删除容器
docker rm mynginx2

#删除镜像
docker rmi mynginx_bak

# 复原
docker load -i mynginx.tar

#执行后再次查看镜像,能够看到镜像曾经复原

Dockerfile

什么是 Dockerfile
Dockerfile 是由一系列命令和参数形成的脚本,这些命令利用于根底镜像并最终创立一个新的镜像。

1、对于开发人员:能够为开发团队提供一个完全一致的开发环境;

2、对于测试人员:能够间接拿开发时所构建的镜像或者通过 Dockerfile 文件构建一个新的镜像开始工作了;

3、对于运维人员:在部署时,能够实现利用的无缝移植。
常用命令

  • FROM image_name:tag
    定义了应用哪个根底镜像启动构建流程
  • MAINTAINER user_name
    申明镜像的创建者
  • ENV key value
    设置环境变量 (能够写多条)
  • RUN command
    是 Dockerfile 的外围局部(能够写多条)
  • ADD source_dir/file dest_dir/file
    将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后主动解压
  • COPY source_dir/file dest_dir/file
    和 ADD 类似,然而如果有压缩文件并不能解压
  • WORKDIR path_dir
    设置工作目录

** 应用脚本创立镜像搭建 Linux Centos7+jdk1.8 的环境
**
应用 dockerfile 构建 JDK8,应用根底镜像是 centos7

# 宿主机创立一个目录,而后把 jdk 传进去
mkdir –p /usr/local/dockerjdk8

下载 jdk-8u171-linux-x64.tar.gz 并上传到服务器(虚拟机)中的 /usr/local/dockerjdk8 目录

# 创立文件 Dockerfile  
cd /usr/local/dockerjdk8
vi Dockerfile

增加 Dockerfile 的配置信息

# 依赖镜像名称和 ID,镜像如果不存在的话会去下载
FROM tutum/centos
#指定镜像创建者信息
MAINTAINER ITCAST
#切换工作目录
WORKDIR /usr
RUN mkdir /usr/local/java
#ADD 是相对路径 jar, 把 java 增加到容器中
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/

#配置 java 环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

# 执行命令构建镜像(留神后边的空格和点,不要省略)docker build -t='jdk1.8' .

# 查看镜像是否建设实现
docker images

# 把 jdk1.8 镜像生成容器
docker run -di --name=mycentosjdk jdk1.8

#进入容器
docker exec -it mycentosjdk /bin/bash


进入 /usr/local/java 查看是否有 jdk1.8.0_171 的目录

查看 Java 版本,验证是否有环境变量以及是否可能查看 java 的版本

Docker 公有仓库

需要:除了一些相似 MySQL,Tomcat 这些公共的镜像,很多企业在开发的时候会有我的项目特有的镜像环境,为了在企业外部局域网能够下载镜像,能够搭建公有的镜像仓库提供下载

# 拉取公有仓库镜像
docker pull registry

# 启动公有仓库容器
docker run -di --name=registry -p 5000:5000 registry

关上浏览器,输出地址:http:// 宿主机 ip:5000/v2/_catalog
看到 `{"repositories":[]}`  示意公有仓库搭建胜利并且内容为空

#Docker 信赖公有仓库地址,批改 daemon.json
vi /etc/docker/daemon.json

#增加以下内容,保留退出。"insecure-registries":["宿主机 ip:5000"]

# 重启 docker 服务
systemctl restart docker

镜像上传至公有仓库
在 Dockerfile 试验中,咱们创立了 jdk1.8 的镜像,咱们把这个镜像上传至公有仓库

# 标记此镜像为公有仓库的镜像
docker tag jdk1.8 宿主机 ip:5000/jdk1.8
# 再次启动私服容器
docker start registry

# 上传标记的镜像
docker push 宿主机 ip:5000/jdk1.8


浏览器再拜访公有仓库,显示有 jdk1.8 的镜像

从公有仓库拉取镜像
1. 删除之前 jdk1.8mycentosjdk 容器

2. 删除 jdk1.8 的镜像

3. 删除刚刚标记上传公有仓库的镜像:宿主机 ip:5000/jdk1.8

4. 从公有仓库拉取 jdk1.8 镜像
docker pull 宿主机 ip:5000/jdk1.8

其余服务器拉取公有仓库的镜像
1. 须要装置 docker
2. 须要信赖公有仓库地址,批改 daemon.json
3. 拉取公有仓库镜像:docker pull 宿主机 ip:5000/ 镜像名称

正文完
 0