初识Docker: 概念和基础
1:Docker概述
Docker 是一个开源的应用容器引擎 ,Docker可以让开发者打包他们的应用以及依赖到一个轻量级、可移植的容器中,然后发布到任何流行的机器上。可以理解成一个轻量的虚拟机。
容器使用的是沙箱机制,性能开销极低。
Docker的优势:
- 更高效的利用资源。由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker对系统资源的利用率更高。
- 更快速的启动时间。Docker直接运行于宿主机内核,无需启动完整的操作系统。
- 一致的运行环境。Docker镜像提供了除内核外完整的运行时环境,确保测试,开发,生产环境一致。
- 持续交付和部署。
- 更轻松的迁移。Docker确保了环境的一致性。可以在很多平台运行。使得迁移更容易。
- 更轻松的维护和扩展。Docker使用分层存储及镜像的技术,使得应用重复部分的复用更容易。维护更加简单。
Docker应用场景:
- 提供一次性的环境。方便web打包发布。
- 提供弹性的云服务。Docker可以随开随关,适合动态扩容和缩容。
- 组件微服务架构。通过多个容器,一台机器可以跑多个服务,本机就可以模拟出微服务架构。
Docker架构:
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
2:Docker安装
CentOS安装Docker
# 1、yum 源更新到最新 yum update # 2、安装依赖软件包,yum-utils 提供yum-config-manager功能,另外两个是devicemapper驱动依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 # 3、设置yum源 ## 3.1 使用ustc源 yum-config-manager --add-repo http://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo ## 3.2 使用aliyun源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ## 3.1 使用docker源 yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo # 4、安装docker 可以通过 yum list docker-ce --showduplicates|sort -r 查看版本,指定安装。例如:yum install -y docker-ce-18.03.1.ce yum install -y docker-ce
其他命令
# 卸载删除docker yum remove docker docker-common docker-selinux docker-engine # docker运行状态 systemctl status docker # 启动,停止,重启docker systemctl start docker # 加入开机启动 systemctl enable docker # 设置docker配置文件 ... https://reg-mirror.qiniu.com/ https://docker.mirrors.ustc.edu.cn https://hub-mirror.c.163.com/ vi /etc/docker/daemon.json { "registry-mirrors": ["https://cr.console.aliyun.com/"] }
# 修改完之后 systemctl daemon-reload 重新加载,systemctl restart docker 重启docker
3:镜像相关命令
3.1 镜像操作:
# 查看本地镜像 docker images # 搜索镜像 docker search centos # 删除镜像 指定删除名字或者镜像ID。docker rmi `docker images -q` 删除所有(慎用) docker rmi centos-name # 拉取镜像 docker pull centos-name:版本 # 上传镜像 hub.docker.com 上注册账号登录,创建Repository docker push ...
3.2 Dockerfile文件指令生成镜像
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。 没有后缀。
Dockerfile 指令每执行一次会在docker上新建一层。建议RUN 下面的操作可以用&&符号连接减少指令。
常用命令:
FROM image_name:tag | 定义了使用哪个基础镜像启动构建流程 |
---|---|
MAINTAINER user_name | 镜像的创建者 |
ENV key value | 设置环境变量(可以多条) |
RUN command | 核心命令(可以多条) |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
COPY source_dir/file dest_dir/file | 和ADD相似,但是如果是压缩文件不会解压 |
WORKDIR path_dir | 设置工作目录 |
执行Dockfile
# 使用Dockfile文件构建镜像语句 先进入到Dockerfile所在目录。注意不要漏了. docker build -t nginx:test .
4:容器相关命令
创建和启动容器:docker run 参数
参数说明:
- -i 表示运行容器
- -t 表示容器启动后会进入命令行。即会分配一个伪终端。交互式容器。
- --name 容器名称
- -v 目录映射关系(前者是宿主机目录,后面是容器内的目录),可以使用多个-v做多个映射,最后做映射。当宿主机修改之后,会共享在容器下。
- -d 会创建一个守护式容器后台运行。例如MYSQL之类。
- -p 端口映射 (前者是宿主机端口,后面是容器内的端口),可以做多个映射。
交互式容器:启动容器后直接进入容器的命令行终端,如果退出则容器停止运行。
命令:docker run -it --name=myname1 镜像名 /bin/bash
守护式容器:容器启动后可以在后台运行。
命令:docker run -di --name=myname2 镜像名
如果想进入守护式容器,则输入命令:docker exec -it myname2 /bin/bash
容器常用操作:
# 查看容器 docker ps -a # 创建容器 ## 1、交互式 docker run -it --name=myname1 镜像名 /bin/bash ## 2、守护式 docker run -di --name=myname2 镜像名 docker exec -it myname2 /bin/bash # 停止容器 docker stop myname2 # 宿主机复制文件>>容器 docker cp 文件 myname2:/路径 # 容器复制文件>> 宿主机 docker cp myname2:/路径+文件 /root # 目录挂载 ## 1、本地创建好映射的目录 touch /usr/local/test ## 2、生成一个挂载的容器 使用参数-v docker run -di -v /usr/local/test:/usr/local/test --name=myname3 镜像名 # 宿主机下查看容器IP docker inspect myname3 # 删除容器 ,如果容器在运行中,不可操作可以先停止运行 docker rm myname3