DockerDay02

Docker安装Nginx

1.搜索镜像  search

2.下载镜像   pull

3.运行测试

-d 后台运行

--name 给容器命名

-p 宿主机端口,容器内部端口

[root@localhost ~]# docker run -d --name nginx01 -p 3344:80 nginx
9f7746aa72dbbe2cbaea867dce6e9b671894ed1f579168ba6263b834795b5626
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED             STATUS             PORTS                                   NAMES
9f7746aa72db   nginx     "/docker-entrypoint.…"   About an hour ago   Up About an hour   0.0.0.0:3344->80/tcp, :::3344->80/tcp   nginx01

4.进入测试

[root@localhost ~]# docker exec -it nginx01 /bin/bash
root@9f7746aa72db:/# 
root@9f7746aa72db:/# ls
bin   docker-entrypoint.d   home   media  proc	sbin  tmp
boot  docker-entrypoint.sh  lib    mnt	  root	srv   usr
dev   etc		    lib64  opt	  run	sys   var
root@9f7746aa72db:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@9f7746aa72db:/# cat /etc/nginx
cat: /etc/nginx: Is a directory
root@9f7746aa72db:/# cd /etc/nginx
root@9f7746aa72db:/etc/nginx# ls
conf.d		mime.types  nginx.conf	 uwsgi_params
fastcgi_params	modules     scgi_params
root@9f7746aa72db:/etc/nginx# 

 Docker安装tomcat

docker run -it --rm tomcat:9.0
#一般用来测试,用完就删除

docker pull tomcat
docker run -d -p 3355:8080 --name tomcat01 tomcat
docker exec -it tomcat01 /bin/bash
#发现问题 1.linux命令少了 2.没有webapps,阿里云镜像的原因。默认是最小的,所有不必要的都剔除掉。
#保证最小可运行的环境

以后部署项目,每次都要进入容器十分麻烦。要是可以在容器外部提供一个映射路径,webapps,我们在外部放置项目,就自动同步到内部就好了。

部署es+kibana

es暴露的端口很多、es十分的耗内存、es的数据一般需要放置到安全目录!挂载

#启动elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
#测试es是否成功
curl localhost:9200
#查看cpu状态
docker stats
#赶紧关闭,增加内存的限制,修改配置文件 -e 环境配置修改
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2

使用Kibana连接es

 可视化(先用portainer)

Docker图形化界面管理工具!提供一个后台面板供我们操作!

docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

访问测试

curl localhost:8088

Docker镜像

镜像是一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

所有的应用,直接打包docker镜像,就可以直接跑起来!

Docker镜像加载原理

UnionFS(联合文件系统)

UnionFS(联合文件系统):一种分层,轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union文件系统是Docker镜像的基础。镜像可以通过分层进行继承,基于基础镜像,可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

Docker镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。

bootfs(boot file system)主要包含bootloader和kernel,bootloader主要是引导加载kernel,linux刚启动时会加载bootfs文件系统,在docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已有bootfs转交给内核,此时系统也会卸载bootfs。

rootfs(root file system),在bootfs之上。包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

分层理解

所有的docker镜像都起始于一个基础镜像层,当进行修改或增加新内容时,就会在当前镜像层之上,创建新的镜像层。

举一个简单的例子,假如基于Ubuntu创建一个新的镜8像,这就是新镜像的第一层;如果在该镜像中添加Python包,就会在基础镜像层之上创建第二个镜像层;如果继续添加一个安全补丁,就会创建第三个镜像。

Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部!

这一层就是我们通常说的容器层,容器之下的都叫镜像层!

commit镜像

docker commit  提交容器成为一个新的副本
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]

 如果你想要保存当前容器的状态,就可以通过commit来提交,获得一个镜像,就像快照一样。

容器数据卷

如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化

MySQL,容器删了,删库跑路!需求:MySQL数据可以存储在本地!

容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!

这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面!

容器的持久化和同步操作!容器间也是可以数据共享的!

使用数据卷

直接使用命令来挂载 -v
docker run -it -v 主机目录:容器内目录
测试
docker run -it -v /home/test:/home centos /bin/bash 
查看是否挂载成功
docker inspect 容器id

主机和容器内文件是双向同步的,以后修改只要在本地修改即可,容器内会自动同步!

安装MySQL

-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

假设将容器删除,挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能!

具名和匿名挂载

匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
查看所有卷的情况
docker volume ls

这就是匿名挂载,-v只写了容器内的路径,没有写容器外的路径!

具名挂载
-v 卷名:容器内路径
查看这个卷
docker volume inspect 卷名

所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxx/_data

通过具名挂载可以方便的找到我们的一个卷,大多数情况使用的是具名挂载。

-v 容器内路径               匿名挂载
-v 卷名:容器内路径          具名挂载
-v /宿主机路径:/容器内路径   指定路径挂载

一旦设置容器权限,容器对我们挂载出来的内容就有限定
docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx:rw nginx
ro 说明这个路径只能通过宿主机来操作,容器局部是无法操作的

初识Dockerfile

Dockerfile就是用来构建docker镜像的构建文件!命令脚本!

通过脚本生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层!

创建一个dockerfile文件,名字随机
文件中的内容 指令(大写)参数
FROM hello-world
VOLUME ["volume01","volume02"]
CMD echo "----end----"
CMD /bin/bash
这里每个命令,就是镜像的一层

数据卷容器

 多个mysql实现数据共享

docker run -d -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7

结论:容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。但是一旦你持久化到本地,这个时候,本地的数据是不会删除的!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值