Docker学习
Docker容器
容器介绍
容器是对进程的封装,
操作系统层面虚拟化技术
包含程序运行时完整的运行环境
包含程序所需要的全部依赖
每个容器之间相互隔离的
跟宿主主机之间也是隔离的
容器与虚拟机
为什会有Docker原因
传统物理服务器和虚拟操作系统本身会占用一定资源
CPU利用率40%,造成性能浪费
容器可以高效利用资源
容器技术比虚拟技术更加轻便快捷
区别
从启动看,虚拟机分钟级,容器秒级
硬件资源:虚拟机独占指定资源CPU、内存、硬盘,而容器为共享资源
硬盘使用:虚拟机GB,容器MB
性能:虚拟机弱于原生几分钟打开,而容器秒级接近原生
Docker介绍
一个开源项目,诞生于2013年,是由Google公司推出Go语言实现
详细
仓库 Registry
集中存放镜像文件的场所,分为共有和私有两种
镜像 Image
构建容器的基础,基于镜像来运行容器
容器 Container
运行程序的场所,容器是基于镜像启动起来的
容器可以运行一个或者多个进程,启动容器,可以登录进去
安装教程
前提
关闭防火墙
systemctl status filewalld.service
查看防火墙状态
systemctl stop filewalld.serice
关闭防火墙
systemctl disable filewalld.service
设置禁止防火请自动启动
关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
开启ip4转发
sed -i '$a\ net.ipv4.ip_forward=1' /etc/sysctl.conf
systemctl restart network
重启网络配置
sysctl net.ipv4.ip_forward
更新yum工具下载yum -utils
yum update
yum install -y yum-utils
添加国内镜像
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装
下载docker
yum install docker-ce-20.10.2
启动docker
sysemctl start docker
设置docker开机启动
system enable docker
加入开机自动启动权限
配置镜像加速
在/etc/docker目录中新建daemon.json文件输入以上内容保存
重启docker: systemctl daemon-reload
systemctl restart docker
常用命令
基础docker
systemctl start/stop/restart docker Docker启动/停止/重启
system status docker 查看docker状态
docker info 查看docker概要信息
镜像
docker images 查看本地镜像
docker search 镜像名如MySQL 搜索一个镜像
docker pull 镜像名如MySQL:版本号 拉取镜像
docker push 镜像名:版本号 上传镜像
docker rmi 镜像ID(docker ps -a查看ID) 删除镜像
dorcker rmi $(docker images -q) 删除全部镜像
docker inspect 容器或者镜像id 查看镜像或者容器详细信息
容器
docker run 创建容器
参数介绍
-i:运行容器
-t:登录容器shell参数
--name:创建容器命名
-v 目录映射关系,共享目录从宿主修改会映射到其他容器
-d:创建一个守护容器,后台运行,+it两个参数,创建后会直接进入容器里
-p 端口映射,可以多个接口映射
创建登录命令
docker run -di --name=容器名称 镜像名称:版本 创建守护容器
docker exec -it 容器名称 (容器ID) /bin/bash 登录守护容器
docker run -it --name=容器名称 镜像名称:版本 /bin/bash 创建交互式容器
exit退出当前容器
查看/删除/复制/重新启动容器
docker ps 查看
docker inspect 容器名 查看运行的容器
docker rm -f 容器ID 删除
docker start 容器id
强制删除
不加-f只能删除停止的容器
docker rm -f $(docker ps -a) 全部删除
docker cp 宿主文件 容器名:容器路径 复制
Dockerfile
介绍
Dockerfile是由一系列的命令和参数构成的脚本,这些命令和脚本应用于基础镜像并最终创建一个新镜像。
Dockerfile的参数
From image_name:tag 定义了使用哪一个镜像来启动构建流程
MAINTAINER user_name 声明镜像的创建者
ENV key value:设置环境变量(可以写多条)
RUN command:是Dockerfile的核心部分(可以写多条)
ADD source_dir/file:将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file:和ADD类似,但是如果有压缩文件,不会解压
WORKDIR path_dir:设置工作目录
构建jdk镜像
直接构建
docker bulid
指定镜像名字
docker build -t jdk8
指定镜像名字和路径
docker build -t jdk8 -f /path/Dockerfile .
docker build -t jdk8 -f http://www.example.com/Dockerfile .
参数
-t 镜像名称
-f 指定dockerfile文件位置
快速创建java应用-jar包
编写dockerfile文件
#1、基础镜像:FROM指令:基础镜像名:tag
FROM java:8
#2.维护者:格式:MAINTAINER
MAINTAINER nemo
#3.镜像的操作指令
ADD拷贝一个文件到容器中,格式:ADD
ADD hello.jar /usr/src/javaapp.jar
#5.配置容器启动后,执行什么命令
ENTRYPOINT ["java","-jar","/usr/src/javaapp.jar"]
利用dockerfile和hello.jar进行镜像构建
docker build -t javahello
运行容器执行jar文件
docker run -it --name=java_helloworld javahello
Volumes
创建数据卷
docker volumes create niginx-vol
查看数据卷
docker volume ls
查看数据卷的挂载目录
docker volumes inspect nginx-vol
使用卷来创容器
docker run -di --name=nginx-test -v nginx-vol:/usr/share/nginx/html nginx
宿主机的目录为:/var/lib/docker/volumes/nginx-vol 数据放在data目录下
创建好容器后可以查看宿主机的_data目录和容器内的指定目录文件是否可以同步更新
清理
docker stop nginx-test
停止容器
docker rm nginx-test
删除容器
docker voume rm nginx-vol
删除数据卷
MySQL容器安装部署
拉取MySQL镜像
docker pull mysql:5.7
创建容器
docker run -di --name=mysql -p3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
-p端口映射
-e添加环境变量
登录MySQL容器
docker exec -it mysql /bin/bash
登录MySQL
mysql -uroot -p123456