容器技术VS虚拟机技术
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为 MB
|
一般为 GB
|
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
底层区别(隔离)
容器应用层(进程级别)
虚拟机是物理资源层的(系统级别)
应用场景
- 部署单体应用
- 持续集成与持续部署
- 微服务
安装
运行测试(已nginx为例)
下载镜像
docker pull nginx
运行容器
docker -p 80:80 -d nginx
说明
- -p 表示容器映射宿主机端口 左边宿主机端口 : 右边容器端口
- -d 表示后台运行
- nginx 表示镜像的名称
基本概念
概要
镜像 (image)
容器(Container)
仓库(Repository)
镜像
一个镜像要一个组文件组成,轻量级,可独立执行的软件,用来保存系统的配置文件,应用,
只能读
运行tomcat
- 运行的环境(os系统,jdk)
- 依赖库
- 配置文件
容器
进行运行产生容器
仓库
存放镜像的
镜像
概要
- 下载镜像
- 查看本地镜像
- 删除本地镜像
下载镜像
语法格式
docker pull 镜像名:[版本号]
说明
版本号: 如果不写表示下载最新的版本 latest
栗子
docker pull mysql:8.0.17
docker pull nginx
查看本地镜像
语法格式
docker images
栗子
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 0901fa9da894 11 days ago 132MB
mysql 8.0.17 b8fd9553f1f0 10 months ago 445MB
删除本地镜像
语法格式
docker rmi [选项] 镜像ID | 镜像名 | 长ID
选项
选项 | 说明 |
---|---|
-f | 强制删除 |
栗子
先删容器 在删除镜像
# 通过名称删除镜像
docker rmi -f nginx:
# 通过id删除镜像
docker rmi 0901fa9da894
# 指定版本的删除
docker rmi mysql:8.0.17
其它命令
删除无用的镜像
docker rmi | grep '<none>' | awk '{print $3}' | xargs
删除没有使用的镜像
docker rmi 'docker images -q'
容器操作
启动容器
语法格式
# 新建容器并且启动容器
docker run [选项] 镜像名[:版本号] 命令 参数
# 启动停止的容器
docker start 容器的id或者容器的名称
选项
选项 | 说明 |
---|---|
-d | 后台运行 返回容器的长ID |
--name='容器名称' | 给容器七名字 ,如果不给,系统会默认给容器起名称 |
-p | 映射端口 左边宿主机的端口:右边容器的端口 |
-v 宿主机的目录:容器的目录 | 数据卷,将容器中目录映射到宿主机 |
备注:
run 如果本地没有该镜像,直接从仓库下载
栗子
docker run --name='nginx-container' -p 80:80 -d nginx
进入容器
进入容器
说明
使用exec命令进入容器
语法格式
docker exec [选项] 容器的名称或者ID 参数 /bin/sh /bin/bash
选项
选项 | 说明 |
---|---|
-it | 使用交互和命令的方式进入容器 |
栗子
root@iZbp11fwf4mzq0vmztatbiZ:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e6d703e0786 nginx "/docker-entrypoint.…" 23 minutes ago Up 23 minutes 0.0.0.0:80->80/tcp nginx-container
docker exec -it 6e6d703e0786 /bin/bash
查看容器
说明
查看所有运行的或者停止的容器
默认情况下查看正在运行的容器
语法格式
docker ps [选项]
选项
选项 | 说明 |
---|---|
-a | 显示所有的容器的 |
停止容器
语法格式
docker stop 容器的名称或者容器的ID
栗子
root@iZbp11fwf4mzq0vmztatbiZ:~# docker ps
CONTAINER ID ... PORTS NAMES
6e6d703e0786 0.0.0.0:80->80/tcp nginx-container
docker stop 6e6d703e0786
docker stop nginx-containe
删除容器
语法格式
docker rm [选项] 容器的名称或者ID ... 容器名称或者容器ID
选项 | 说明 |
---|---|
-f | 强制删除(如果容器在运行,停止容器,在删除容器) |
栗子
# 删除正在运行的容器
docker stop 6e6d703e0786
docker rm 6e6d703e0786
# 等价于
docker rm -f 6e6d703e0786
删除所有容器
docker rm -f 'docker ps -aq'
Dockerfile
原生的定制镜像
-
先有个基础镜像(ubuntu)
docker pull ubuntu
-
运行容器
docker run --name='ubuntu-jdk1.8' -d ubuntu:18.0.4
-
进入容器
docker exec ubuntu-jdk1.8 -it /bin/bash/
-
下载oracle-jdk
weget xxx,jdk
-
解压
tar -zxvf xxxjdk /opt/
-
配置环境变量
缺点
- 制作的过程只有制作者知道
Dockerfile指令
FROM
说明
指定基础镜像 并且必须是第一条指令
指令格式
FROM 镜像名称[:指定版本号]
栗子
FROM ubuntu:18.0.4
或者
FROM nginx
RUN
说明
构建镜像时执行的命令
语法格式
shell 格式
RUN 基础命令
exec格式(了解)
RUN ["命令","参数" ,"参数",...]
shell 格式
RUN apt install vim
# exec 格式
RUN ["apt","install" ,"vim"]
说明
影响制作容器的大小,一条RUN命令就是构建一层
命令
docker build -t 镜像的名称 指定Dockerfile的名称
-f /绝对路径/Dockerfile的名称
栗子
创建Dockefile文件
FROM nginx
RUN echo '<h1> 2002班 <h1>' > /usr/share/nginx/html/index.html
构建镜像
docker build -t zw/nginx-19 ./
查看镜像是否构建成功
docker images
运行镜像
docker run -p 80:80 -d zw/nginx-19
网友评论