环境准备
环境查看
#系统内核是3.10以上
[root@izj0370iijl9idz ~]# uname -r
3.10.0-514.26.2.el7.x86_64
#系统版本
[root@izj0370iijl9idz ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
安装 文档https://docs.docker.com/engine/install/centos/
#1.卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#2.安装需要的安装包
yum install -y yum-utils
#3.设置镜像仓库
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
#更新索引命令
yum makecache fast
#4.安装docker相关 docker-ce社区版 ee企业版
yum install docker-ce docker-ce-cli containerd.io
#5.启动docker
systemctl start docker
#创建目录
sudo mkdir -p /etc/docker
#编写配置文件,只需要改地址。
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://d2wrh6xi.mirror.aliyuncs.com"]
}
EOF
#重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
部署:es+elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag
可视化
什么是portainer?
docker可视化面板
#安装docker
docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZdqBy0yw-1616907991338)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20210326152934659.png)]
docker commit 提交容器成为一个新的副本
coker commit -m="提交的描述信息" -a="作者"
#启动Tomcat
[root@izj0370iijl9idz ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4a4d8cf23de8 tomcat "catalina.sh run" 30 seconds ago Up 28 seconds 0.0.0.0:8080->8080/tcp busy_kilby
d060c3be5331 portainer/portainer "/portainer" 26 minutes ago Up 26 minutes 0.0.0.0:8088->9000/tcp focused_brahmagupta
#exec前台启动 -it 交互模式 容器id
[root@izj0370iijl9idz ~]# docker exec -it 4a4d8cf23de8 /bin/bash
#docker start 容器id
#docker touch 容器id也可以
root@4a4d8cf23de8:/usr/local/tomcat#
#测试 启动默认的Tomcat
#发现没有webapps的应用,镜像原因,官方没有
#解决:拷贝Tomcat下webapps的文件
root@4a4d8cf23de8:/usr/local/tomcat# cp -r webapps.dist/* webapps
#自定义镜像 讲修改的容器commit提交变成新的镜像,以后均可使用
[root@izj0370iijl9idz ~]# docker commit -a="cong" -m="add webapps app" 4a4d8cf23de8 tomcat01:1.0
sha256:8663e72b01ce3d767d34022e608bab03e46314d755240ffba4ab6f8fd42118ec
什么是容器数据卷?
docker的理念回顾
将应用和环境打包成一个镜像!
数据?如果数据都存在容器中,那么我们容器删除,数据就会丢死 需求:数据可以持久化
需求:MySQL数据可以储存到本地
容器之间可以有一个数据共享的技术!docker容器中产生的数据,同步到本地!
这就是卷的技术!目录的挂在,将我们容器的目录,挂载到Linux上!
容器的数据和linux同步!容器之间也可以数据共享!
方式一:直接使用命令挂载 -v
[root@izj0370iijl9idz home]# docker run -it -v /home/ceshi:/home centos /bin/bash
#查看容器详细
[root@izj0370iijl9idz home]# docker inspect 115158541db4
"Mounts": [
{
"Type": "bind",
"Source": "/home/ceshi", //主机地址
"Destination": "/home",//容器内地址
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
思考:mysql的数据持久化的问题
#获取镜像
[root@izj0370iijl9idz ceshi]# docker pull mysql:5.7
#运行容器,需要做数据挂载 #安装启动MySQL 需要配置密码
#官方测试
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
#实测
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
--name 容器名字
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
远程连接mysql
#匿名挂载
-v 容器内路径!
docker run -d -P --name nginx01 -v /etc/nginx nginx
#查看所有的卷的名称 匿名卷
docker volume ls
#具名挂载
# 通过-v 卷名:容器内路径
[root@izj0370iijl9idz data]# docker volume ls
DRIVER VOLUME NAME
local dbe649f0bd0124c3eed631e8219f71a7c4054efd1906727f1abb4954aa38e42e
local f1931ff8ca2c418a453801b7ab80901da0a7495c1bbf57dee5a2c9623af0a783
local juming-nginx
[root@izj0370iijl9idz data]#
所有的docker容器的卷,没有制定目录的情况下都是在 /var/lib/docker/volumes/xxxx/_data
我们通过具名挂载,一般不是用匿名挂载,大多数都是具名挂载
#如何确定是具名挂载还是匿名挂载,还是指定挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径::容器内路径 #指定容器路径
拓展
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx[:ro/:rw] nginx
- ro readONLY #只读
- rw readwrite #可读可写
#一旦设置了容器权限 容器对我们挂载出来的的内容就有限定了
# ro 只能通过宿主机操作,容器内部无法操作
DockerFile就是用来构建docker镜像的构建文件!脚本命令
通过脚本生成镜像,镜像是一层一层的,脚本一个个的命令,每一个命令都是一层
#dockerfile 文件内容
#指令都为大写
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "-----end------"
CMD /bin/bash
#根据脚本生成镜像
docker build -f dockerfile1 -t cong/centos .
这个卷和外部肯定有一个数据卷挂载
FROM #基础镜像,一切从这里开始构建
MAINTAINER #镜像是谁写的,姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #步骤,Tomcat镜像,这个Tomcat压缩包!添加内容
WORKDIR #镜像工作目录
VOLUME #挂载的目录
EXPOSE #保留端口配置
CMD #指定这个端口启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD #当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指定,触发指令
COPY #类似ADD,将文件拷贝到镜像中
ENV #构建的时候设置环境变量
DockerHub中99%的镜像都是从这个基础镜像都是FROM scratch,然后配置需要的软件和配置来进行的构建。
创建一个自己的centos
#1.编写dockerfile文件
[root@izj0370iijl9idz dockerfile]# vim mydockerfile
[root@izj0370iijl9idz dockerfile]# cat mydockerfile
FROM centos
MAINTAINER congge<[email protected]>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash
#2.通过dockerFile构建镜像
docker build -f mydockerfile -t mycentos:0.1 .
Successfully built 088a30021fa1
Successfully tagged mycentos:0.1
#3.测试运行
# 1. 上传dockerfile
FROM java:8
COPY *jar /app.jar
CMD ["--server.port=80"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
# 2. 上传jar包到对应目录
# 3. 运行dockerFile生成镜像
docker build -t panghu . #panghu为镜像名 要把dockerfile和jar包放在同一个目录下
# 4.执行
docker run -it panghu