Docker 学习笔记
一、简介
概述
Docker 作为目前最流行的开源容器引擎,具有开箱即用、快速部署、资源隔离、可移植性强等特性,可以在短时间上手使用,实现容器化部署应用。
1、什么是Docker
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。2014年4月9日,Docker1.0发布
基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。
Docker是完整的一套容器管理系统
Docker提供了一组命令,让用户更加方便直接地使用容器技术,而不需要过多关心底层内核技术
是一个开源的应用容器引擎,使用Go语言开发,基于Linux内核的cgroup、namespace、Union FS等技术,对应用进程进行封装隔离,并且独立于宿主机与其他进程,这种运行时封装的状态称为容器
早期版本基于LXC,从0.7以后开始去LXC,转为自行研发的libcontainer,从1.11版本开始,进一步演进为使用runC和containerd
2、镜像(image)
镜像好比一个模板,通过镜像来创建容器。
一个镜像可以创建N个容器
镜像是不可变的,不能修改里面的内容
镜像可分为:基础镜像(OS)、环境镜像(jdk)、应用镜像(tomcat)、业务镜像(jar包)
3、容器(container)
镜像run起来之后就称之为容器
每个容器都是Linux的一个进程,也可以把容器看成是一个独立的Linux系统
容器是可变的,可以在容器里面进行各种Linux操作(touch、mkdir、rm)
4、镜像仓库(repository)
存放镜像的地方
分为公有仓库和私有仓库
官方的仓库为Docker Hub,私有仓库可以通过registry和harbor来搭建
5、 Docker特性
优点
相比于传统的虚拟化技术,容器更加简洁高效
开箱即用、快速部署、可移植性强、环境隔离
容器使用共享公共库和程序
随处运行:容器可以将代码与配置文件和相关依赖库进行打包,从而确保在任何环境下的运行都是一致的。
高资源利用率:容器提供进程级的隔离,因此可以更加精细地设置 CPU 和内存的使用率,进而更好地利用服务器的计算资源。
快速扩展:每个容器都可作为单独的进程予以运行,并且可以共享底层操作系统的系统资源,这样一来可以加快容器的启动和停止效率。
缺点
• 容器的隔离性没有虚拟化强(linux下的容器不能虚拟出windows操作系统)• 共用Linux内核,安全性有先天缺陷
• SELinux难以驾驭
二、centos环境下安装docker
1、卸载
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、安装docker
yum install docker
3、设置仓库
官方仓库
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo ##此地址为官方的仓库地址,在国内建议不要用
阿里云的镜像仓库地址
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、启动docker
systemctl start docker
5、判断是否启动成功
docker version
6、使用hello-world镜像测试docker
docker run hello-world
三、docker操作命令 (docker --help)
*** 访问Docker Hub 网址为: https://hub.docker.com/ 在其中进行搜索我们需要的镜像。 或者 docker search 镜像名称 **
1、查看镜像列表
docker images
2、 拉取镜像
docker pull [options] NAME[:TAG]
name是拉取镜像的名称,:TAG表示是可选的,如果不选表明时latest,如果选择表明是指定版本的.
options是拉去的一些参数.
例:docker pull nginx # 拉取的为nginx 的最新版本
3、删除镜像
docker rmi nginx:latest
# rmi remove image
4、运行镜像
参考链接: https://hub.docker.com/_/nginx
docker run nginx # 简单的运行镜像
docker run --name nginx-server -p 80:80 -d nginx
# --name 取名字
# -p 端口映射 宿主机端口:容器端口
# -d 后端运行
# -e:代表添加环境变量 MYSQL_ROOT_PASSWORD=123456 给root账户设置密码是123456
# 以mysql为例
docker run -p 3306:33066 \
--name mysql \
-v /home/docker/mysql/conf:/home/docker/mysql/conf.d \
-v /home/docker/mysql/logs:/home/docker/mysql/logs \
-v /home/docker/mysql/data:/home/docker/mysql/data \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql
# 帮助
docker run --help
# 挂载 -v 宿主机目录:容器目录
docker run --name nginx-server -p 80:80 -v /mydata/nginx/conf:/etc/nginx/nginx.conf -d nginx:latest
5、 查看镜像是否运行
docker ps
# -a 查看所有容器
# -q 查看所有容器ID
docker ps -a
docker ps -a -q
6、进入运行的容器内部
docker exec -it 容器id bash
# 退出容器 exit
7、查看容器的端口
docker inspect 容器的name
8、删除容器
docker rm 容器的id/容器的name # 只能删除停止的容器
docker rm 容器id # 不能删除运行的容器
docker rmi -f 容器id # (可以删除运行的容器)
docker rmi -f $(docker ps -aq) # 遍历删除所有的
9、打包
docker save 镜像id
10、解压
docker load 文件名称.tar
11、容器的停止,启动、暂停
# start启动所有停止的容器
docker start $(docker ps -a -q)
# stop停止所有容器
docker stop $(docker ps -a -q)
# remove删除所有容器
docker rm $(docker ps -a -q)
12、查看日志
docker logs --help
docker logs -f -t --tail 条数 容器id
# -tf 显示日志
# --tail number 显示日志的行数
四、打包镜像
1、准备DockerFile
FROM java:8 # 拉取一个jdk为1.8的docker image
MAINTAINER 作者名称 <作者邮箱> # 作者信息 ,指令设置生成镜像的 Author 字段
VOLUME /root/dockerfile/data #
EXPOSE 8080 # 该容器暴露的端口是多少,就是jar在容器中以多少端口运行
ADD zlc-stor-0.0.1-SNAPSHOT.jar zlc-stor.jar # 就是你上传的jar包 zlc-stor-0.0.1-SNAPSHOT.jar, 替换为jar包的名称 zlc-stor.jar
ENTRYPOINT ["java","-jar","zlc-stor.jar"] # 容器启动之后执行的命令,java -jar zlc-stor.jar 即启动jar
# form: 这个镜像是谁写的;
# MAINTAINER:告诉别人谁在维护:姓名,邮箱
# RUN:
# ADD: 就是你上传的jar包 zlc-stor-0.0.1-SNAPSHOT.jar, 替换为jar包的名
# WORKDIR:镜像的工作目录
# VOLUME:挂载的目录
# EXPOSE: 保留端口配置
# CMD:指定容器启动的时候的指令
# COPY:
# ENV: 构建的时候设置环境变量
2、将jar包和Dockerfile文件放到同一个目录下
3、开始生成镜像
docker build -t zlc-stor .
4、查看镜像是否生成
docker images
5、运行镜像
docker run -d --name zlc-demo -p 8080:8080 zlc-stor
6、查看镜像日志
docker logs --tail 300 -f zlc-demo
五、可视化界面管理平台
1、 简介
Portainer是一个可视化的容器镜像的图形管理工具,利用Portainer可以轻松构建,管理和维护Docker环境。 而且完全免费,基于容器化的安装方式,方便高效部署。
官方网站: https://www.portainer.io/
2.Protainer 的安装
https://www.portainer.io/installation/
3、使用docker安装
# 1、 搜索镜像
docker search Portainer
# 2、拉取镜像
docker pull portainer/portainer
# 3、查看镜像
docker images
# 4、运行镜像
docker run --name portainer8080 -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -d portainer
# 5、网页访问:
http://localhost:9000