容器化技术
安装Docker及基本介绍
1.安装docker的社区版本
yum -y install docker-ce
2. 启动docker
service docker start
3.查看docker版本
docker version
在这里插入图片描述
4.docker拉取镜像
docker pull hello-world
5.启动docker镜像
docker run hello-world
6.设置镜像仓库/etc/docker/daemon.json中设置,可设置阿里云镜像仓库
配置完执行
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker基本概念
分为docker daemon ,restapi,client
容器和镜像的概念![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/046f8715004fcb00baa2fbacfba38205.png)
Docker执行流程
Docker常用命令
1.拉取镜像
docker pull 镜像名:tags
2.查看下载镜像
docker images
3.创建容器,启动应用
docker run 镜像名:tags
4.正在运行的镜像
docker ps
5.删除容器
docker rm -f 容器id
6.删除镜像
docker rmi -f 镜像名:tags
Docker 宿主机和容器之间的关系
使用命令时容器内部启动应用端口映射到宿主机上给外部访问
docker run -p 8000:8080 tomcat
8000为宿主机暴露端口,8080为容器服务端口
登录宿主机查看端口使用状况发现docker-proxy为映射进程
使启动容器时候后台运行,返回容器id
docker run -p 8000:8080 -d tomcat
使用命令停掉容器,再删除容器
docker stop 容器id
docker rm 容器id
或者
docker rm -f 容器id
删除镜像
docker rmi tomcat:tag
如果有容器在使用的镜像使用docker rmi 无法移除
Docker的结构
进入容器执行命令
docker exec [it] 容器id 命令
it采用交互式命令
demo
docker exec -it b591983064cf /bin/bash
进入redis容器中
查看容器内操作系统内核cat /proc/version
exit
命令退回宿主机
默认docker存放的容器和镜像位置存放路径
容器生命周期
docker命令及生命周期
1.使用docker create
和docker start
创建容器并且启动
2.使用docker pause
暂停容器 以及docker unpause
停止暂停
3.使用docker stop
停止容器
Dockerfile
dockerfile 是一个包含于组合镜像命令的文本文档
docker 通过读取dockerfile生成镜像
docker build -t 机构/镜像名:tags dockerfile目录
1.创建Dockerfile文件 以及docker-web 文件夹
编辑Dockerfile文件
FROM tomcat:latest
MAINTAINER hejiawang.com
#cd /usr/local/tomcat/webapps
#切换工作目录,不存在就创建
WORKDIR /usr/local/tomcat/webapps
#复制宿主机目录下的所有文件到容器目录下
ADD docker-web ./docker-web
在docker-web 下新建index.html文件
在dockerfile当前目录下执行命令构建镜像
docker build -t hejiawang.com/mywebapp:1.0 .
使用docker images
即可查看刚刚新建的docker镜像
使用命令docker run -d -p 8001:8080 hejiawang.com/mywebapp:1.0
用刚构建的镜像创建一个容器并且将其端口映射到宿主机的8001端口查看
运行后可以通过浏览器看到刚刚在宿主机上的index.hmtl文件
镜像分层
在新的目录下创建新的Dockerfile
FROM centos
RUN ["echo","aaaa"]
RUN ["echo","bbbb"]
RUN ["echo","cccc"]
RUN ["echo","dddd"]
每一步构建完都会生成临时镜像
修改Dockerfile 中的内容
再次使用命令构建镜像,构建的重复的东西会使用之前临时容器的快照
Dockerfile 基本命令
1.FROM
2.MAINTAINER和LABEL
3.WORKDIR
4.ADD和COPY
5.ENV
6.在dockerfile执行命令,
RUN
在docker build
的时候执行命令
ENTRYPOINT
和CMD
在容器启动时和启动后执行命令
RUN命令格式
shell格式
EXEC格式
ENTRYPOINT启动命令
CMD启动命令
CMD和ENTRYPOINT 具体区别
新建一个dockerfile
FROM centos
RUN ["echo","image building!!!"]
CMD ["echo","container starting.."]
使用docker build 构建镜像
运行新构建的镜像 Dockerfile中的CMD命令打印了,如果docker run 后面加了命令则不执行CMD中的命令
修改Dockerfile 重新构建一个镜像
将CMD修改为ENTRYPOINT
FROM centos
RUN ["echo","image building!!!"]
ENTRYPOINT ["echo","container starting.."]
可以看到 docker run 的时候后面跟命令ENTRYPOINT 的命令仍然会执行
CMD和ENTRYPOIN 组合用
如下案例运行容器的时候ps 可以和执行的命令灵活使用
Docker构建redis案例
1.创建Dockfile文件
2.使用docker build 构建redis镜像
3.使用docker images 查看到构建的镜像
4.使用docker run -p 7000:7000 启动容器
5.查看宿主机对外暴露的端口
6.进入容器查看
容器见link单向通信
通过容器间通过名称访问
命令docker run -d --name web tomcat
命令docker run -d --name databese -it centos /bin/bash
,默认centos创建会自动退出 所以需要加上-it和 /bin/bash 使容器交互启动
命令docker inspect 容器id
查看容器的源数据
其中IPAddress 为容器ip
进入tomcat容器去ping centos ip 容器互通,但是ping容器名称无法通
将原来tomcat容器删除掉,然后使用命令docker run -d --name web --link databese tomcat
创建启动容器
再次进入tomcat容器 通过容器名ping其他容器即可ping通
所以在java程勋的jdbc配置中可以配置name并且在启动容器时link到name即可,几时容器重启更换ip也可以网络通
Bridge网桥双向通信
docker network ls
查看docker容器的网桥
docker network create -d bridge my-bridge
为容器创建新的网桥
将容器与网桥互相绑定即可通信
docker network connect my-bridge web
是容器和网桥绑定
docker network connect my-bridge databese
进入centos容器中ping tomcat容器名即可通
网桥实现原理
容器间数据共享
为了解决容器共用一个文件的情况
解决思路
设置-v 设置宿主机目录和容器目录(通过在宿主机创建目录,使多个容器往上挂在)
dcoker run --name 容器名 -v 宿主机路径:容器内挂在路径 镜像名
demo
docker run --name web -v /usr/apps:/usr/local/tomcat/webapps tomcat
设置–volumes-from 共享容器内挂载点 (通过创建一个已经挂在到宿主机的容器,其他容器都挂在这个已挂载的容器)
1.创建共享容器
docker create --name webpage -v /webapps:/tomcat/webapps tomcat /bin/true
2.共享挂在点
docker run --volume-from webpage --name t1 -d tomcat
demo
新建t1容器,将tomcat 容器下的webapps 目录挂在到宿主机的/usr/webapps 下面
进入容器内也可以看到挂载到宿主机下的目录有文件
新建t2容器,也将其目录挂在到宿主机上
修改index.html文件,不需要重启
访问无论哪个容器,页面都已修改
每次创建容器创建都要指定挂载点太复杂,
直接手动创建挂载容器
docker create --name webpage -v /usr/local:/usr/local/tomcat/webapps /bin/true
再创建其他容器时候指定挂载共享容器
docker run -p --volumes-from webpage --name t3 -d tomcat
Docker compose 容器编排工具
查看docker-compose版本
1.创建docker compose yml文件,并且从官网将内容复制进来
2.docker-compose -d 即可启动多个容器