赞
踩
环境准备
环境查看
#系统内核是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<1141904326@qq.com> 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。