1、Docker简介
1.1、Docker和VM的区别
- VM是硬件虚拟化技术,使用HypeVisor将硬件资源划分为虚拟资源。
- Docker是操作系统虚拟化技术,将系统资源划分为虚拟资源。
1.2 优势
虚拟机需要使用额外的开销,容器并不是完整的操作系统,占用资源少,启动更快。
2、Docker 安装
安装完,执行docker命令 出现错误提示:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
解决办法:
$ systemctl daemon-reload
$ sudo service docker restart
$ sudo service docker status (should see active (running))
$ sudo docker run hello-world
配置镜像加速:
# 修改 /usr/lib/systemd/system/docker.service 启动脚本
vim /usr/lib/systemd/system/docker.service
# 在dockerd后面加参数
ExecStart=/usr/bin/dockerd --registry-mirror=http://hub-mirror.c.163.com
3、镜像
镜像是一种构建时结构,容器是一种运行时结构。
3.1 镜像结构
镜像分层
镜像由一个或者多个只读镜像层构成,当多个镜像层堆叠在一起,就构成了一个完整的镜像。
4、运行容器
利用容器启动一个web服务器
docker container run -it --name webserver -p 8090:8080 nigelpoulton/pluralsight-docker-ci /bin/bash
- -it 会将当前终端连接到容器,并且指定运行在docker中的容器
- –name 指定容器名
- -p 将虚拟机的端口映射到容器8080端口
如果80端口没被占用不出意外,访问ip+端口 会出现一下页面;
4.1 docker 常见命令
-
docker image pull : 拉取镜像
-
docker image ls 查看已经拉取的镜像
-
docker image prune 移除全部悬虚镜像
-
docker search xxx 搜索镜像
-
docker image rm 镜像id 删除镜像
-
docker image inspect 查看镜像元数据
-
退出Shell终端与容器的连接 Ctrl + PQ
-
运行docker容器 docker container run
-
停止容器 docker container stop
-
删除容器 docker contaner rm
-
查看所有运行容器的状态 docker container ls 等价于 docker ps
-
shell连接到一个运行中的主机 decker container exec
4.2 docker 运行mysql
#安装mysql镜像
docker container run -it --name mysql -p 3309:3306 mysql:5.7
5 应用容器化
容器就是为应用而生,容器能够简化应用的构建,部署和运行过程。
步骤:
- 编写应用代码 如果使用java ,则打包成jar包
- 编写Dockerfile文件
- 执行Docker image build 命令
- 等待Docker将应用程序构建到Docker镜像中
5.1 Dockerfile 编写
命令介绍:
- FROM 指定基础镜像
- LABEL 指定当前镜像的维护者
- COPY . /SRC 将应用文件从构建上下文复制到当前镜像中
- ADD 作用通COPY 但是能访问网络资源,能够自动解压压缩文件
- EXPOSE 暴露端口
- ENTRYPOINT 在镜像运行成容器时,要执行的命令
- CMD 可以被docker run 命令覆盖,ENTRYPOINT不能被覆盖。
完整的Dockerfile文件:
# FROM指定基础镜像
FROM java:8
# ADD COPY 都是把外部文件放到镜像中去,但是ADD可以访问网络资源,可以把压缩包解压成文件夹。
ADD springbootDemo-0.0.1-SNAPSHOT.jar
# EXPOSE 暴露镜像的端口
EXPOSE 8080
# ENTRYPOINT 在镜像运行成容器时,要执行的命令
ENTRYPOINT ["java","-jar","/springbootDemo-0.0.1-SNAPSHOT.jar"]
# ENV 指定环境变量
构建镜像:
docker build -t evan-springboot-demo:latest .
构建成功:
运行springboot-demo容器:
docker container run -it --name springbootdemo -p 8080:8080 evan-springboot-demo /bin/bash