一、简介
1.docker简介
- 正常部署一个项目环境配置相当麻烦,jdk、mysql、redis等,比如换一台服务器需要重新配置
- 可以利用docker的可移植性,将环境一模一样的复制
- Docker的出现使得Docker得以打破过去「程序即应用」的观念。透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作
2.docker理念
解决了运行环境和配置问题的软件容器, 方便做持续集成并有助于整体发布的容器虚拟化技术。
二、docker安装
# centos7+环境安装docker
#安装ggc
yum -y install gcc
yum -y install gcc-c++
#安装需要软件包
yum install -y yum-utils
#设置stable镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新yum软件包索引
yum makecache fast
#安装DOCKER CE
yum -y install docker-ce docker-ce-cli containerd.io
#启动docker
systemctl start docker
#测试
docker version
#卸载
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
三、docker常用命令
1.帮助启动命令
- 启动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
2.镜像操作
$ docker images #查看镜像
$ docker search OPTIONS xxx #搜索镜像
$ docker pull xxx:latest #拉取镜像
$ docker system df #查看镜像/容器/数据卷所占的空间
$ docker rmi -f xxx #删除镜像
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签版本号
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
OPTIONS说明:
limit : 只列出N个镜像,默认25个
docker search --limit 5 redis
last 版本号
3.容器操作
$ docker rum [options] image [command] 运行镜像
$ docker ps # 查看正在运行的容器
$ docker ps -a # 查看所有容器
$ docker ps -l # 查看最近一次运行的容器
$ docker create 容器名或者容器ID # 创建容器
$ docker start [-i] 容器名 # 启动容器
$ docker run 容器名或者容器ID # 运行容器,相当于docker create + docker start
$ docker run --name nginx01 -p 80:80 -d nginx # 创建并运行容器
--name nginx01:容器别名。
-p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
-d nginx: 设置容器在在后台一直运行
$ docker attach 容器名或者容器ID bash # 进入容器的命令行(退出容器后容器会停止)
$ docker exec -it 容器名或者容器ID bash # 进入容器的命令行 退出容器不会停止
$ docker stop 容器名 # 停止容器
$ docker kill 容器名
$ docker rm 容器名 # 删除停止的容器
$ docker top 容器名 # 查看WEB应用程序容器的进程
$ docker inspect 容器名 # 查看Docker的底层信息
$ docker logs 容器名 #查看容器日志
OPTIONS说明(常用):有些是一个减号,有些是两个减号
-d: 后台运行容器并返回容器ID
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-p: 指定端口映射
# docker 安装mysql
$ docker pull mysql:5.6
# 查看本地镜像
$ docker images
# 运行容器
$ docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.6
4.docker镜像
-
什么是镜像
轻量级,可执行独立软件包,包含运行某个软件所需的所有内容,把应用程序和配置依赖打包好形成一个可交付的运行环境
-
分层的镜像
在pull下载过程种可以看到docker的镜像好像是在一层一层的在下载
-
UnionFS(联合文件系统)
镜像可以通过分层来进行继承
-
Docker镜像加载原理
docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是引导文件系统bootfs
-
为什么 Docker 镜像要采用这种分层结构
镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用
-
重点理解
Docker镜像层都是只读的,容器层是可写的 当容器启动时,一个新的可写层被加载到镜像的顶部
5.容器打包镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
#示列
docker commit -a "qxd" -m "this is tomcat test" 1cff900e2ef6 tomcat:v1
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停
6.本地镜像上传阿里云
https://cr.console.aliyun.com/cn-hangzhou/instances 阿里容器镜像服务
-
命令空间创建
-
创建镜像仓库
-
管理创建的镜像仓库
根据操作指南· 将镜像推送到阿里云
#1. 登录阿里云Docker Registry
$ docker login --username=10841*****@qq.com registry.cn-hangzhou.aliyuncs.com
#2. 将镜像推送到Registry
$ docker login --username=10841*****@qq.com registry.cn-hangzhou.aliyuncs.com
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/qxd_private/imags:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/qxd_private/imags:[镜像版本号]
#3. 从Registry中拉取镜像
$ docker pull registry.cn-hangzhou.aliyuncs.com/qxd_private/imags:[镜像版本号]