Docker基础

Docker基础

Docker让开发实现自运维! 该片仅为个人理解,整理的学习笔记,供日后使用回忆所作笔记

Docker文档

仓库

Docker安装

Docker支持CentOS7(64-bit)CentOS6.5(64-bit)或更高的版本

前提条件:

CentOS7要求系统为64位,系统内核版本为3.1.0以上

CentOS6.5或更高的版本,系统内核版本为2.6.32-432或更高版本

查看自己系统的内核

uname -r
// 3.10.0-693.2.2.el7.x86_64

查看已安装的CentOS版本信息

cat /etc/redhat-release
// CentOS Linux release 7.4.1708 (Core)

Docker的基本组成

镜像(image)

容器(container)

​ Docker利用容器独立运行一个或一组应用。容器是用镜像创建的运行实例。它可以被启动,开始,停止,删除。每个容器都是相互隔离的,保证安全的平台。可以吧容器看做一个简易版本的Linux环境

仓库(repository)

仓库用于集中存放镜像文件,类似于GitHub。

仓库和仓库注册服务器的区别:仓库注册服务器上存放着很多很多仓库,每个仓库又都存放着很多镜像,每个镜像有不同的标签

仓库分为公开仓库和私有仓库。国内最大的公开仓库是Docker Hub

国内公开仓库也包括阿里云,网易云等。

关系

仓库存放镜像,镜像生成容器,容器运行服务

镜像加速器

阿里云镜像加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["镜像加速地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

检测是否成功

ps -ef|grep docker

测试docker拉取并运行镜像

docker run hello-world

Docker常用命令

帮助命令

docker version
docker info
docker --help

镜像命令

docker images
docker images -a // 所有镜像
docker images -q // 所有镜像ID
docker images --digests // 镜像包的摘要信息
docker images --no-trunc // 显示完整的镜像信息
docker search 某个镜像名字 // 从hub.docker.com查询某个镜像
docker pull 某个镜像名字 // 拉取镜像
docker rmi 某个镜像ID // 删除某个镜像

容器命令

  • 新建并启动镜像
docker run [options] image [command] [arg...]
options: 
--name // 为容器制定一个名称
-d // 后台运行容器,并返回容器ID,即守护式容器
-i // 以交互式运行容器,通常与-t一起使用
-t // 为容器重新分配一个伪输入终端,通常与-i同时使用
-P // 随机端口映射
-p // 指定端口映射,包含四种格式
	ip:hostPort:containerPort
	ip::containerPort
	hostPort:containerPort
	containerPort
  • 查询所有正在运行的容器
docker ps [options]
options:
-a 所有当前正在运行的容器+历史上运行过的
-l 显示最近创建的容器
-n 显示最近n个创建的容器
-q 只显示容器编号
--no-trunc 完整信息
  • 退出容器
exit // 停止退出
ctrl + p + q   control + p + q // 容器不停止退出
  • 启动容器
docker start 容器ID或者容器名
  • 重启容器
docker restart 容器ID或者容器名
  • 停止容器
docker stop 容器ID或者容器名
  • 强制停止容器
docker kill 容器ID或者容器名
  • 删除已停止的容器
docker rm 容器ID // 一次删除一个容器
docker rm  -f $(docker ps -a -q) // 一次删除多个容器
docker ps -a -q | xargs docker rm // 一次删除多个容器
  • 其他
docker run -d 容器ID // 启动守护式容器
docker logs -f -t --tail 容器ID // 查看容器日志
docker top 容器ID // 查看容器内运行的进程
docker inspect 容器ID // 查看容器内部细节
docker attach 容器ID  // 直接进入容器启动命令终端,不会启用新的进程 
docker exec -it 容器ID 操作 // 进入正在运行的容器,在容器中打开新的终端,并且可以启动新的进程  docker exec -it 容器ID /bin/bash
docker cp 容器ID:/容器内路径  /主机路径  // 从容器中拷贝文件到主机

补充

docker commit // 提交容器副本使之成为一个新的镜像
docker commit -a="作者" -m="描述信息" 容器ID 要创建的目标镜像名:[标签名]
docker inspect 查看docker配置信息

添加容器数据卷轴

容器与宿主机之间数据共享,当容器停止启动后数据依然共享

docker run -it -v /宿主机目录:/容器目录 镜像名 
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名 // 带权限

Dockerfile

构建镜像的原材料,命令符为大些

FROM // 基础镜像,当前镜像是基于哪个镜像
MAINTAINER // 作者 + 作者的email
RUN // 构建时需要执行的命令
EXPOSE // 向宿主机暴露出的端口
WORKDIR // 容器的工作目录,工作空间名
ENV // 环境变量 可在后续的RUN指令中使用 MY_PAtH /app  引用:WORKDIR $MY_PAtH
ADD // 拷贝宿主机的文件到容器内,会自动处理URL和压缩包
COPY // 拷贝宿主机文件到容器内 COPY src dest COPY ['src','dest']
VOLUME // 容器数据卷
CMD // 指定容器启动时运行的命令,可以有多个CMD,但只有最后一个生效,CMD会被docker run 之后的参数替换
ENTRYPOINT // 指定容器启动时运行时的命令 区别于CMD的是,ENTRYPOINT会追加docker run 之后的参数
ONBUILD // 触发器,当构建一个呗集成的Dockerfile时运行命令,父镜像在被子镜像集成后父镜像的onbuild被触发

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!