Docker hub官方链接: https://hub.docker.com

部署Nginx

官方已经给出了方法: https://hub.docker.com/_/nginx

运行容器

$ docker run --name nginx-server -v /opt/nginx-server:/usr/share/nginx/html:ro -d nginx

使用--name为容器命名,使用-v将指定的宿主机的目录挂载到指定的容器中的目录,并且赋予一个read-only权限,使用-d则是创建为守护进程。如果本地并没有该容器,那么Docker会自动下载镜像,如果没有显式地指定tag,则默认使用latest

$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ff6b4d326548 nginx "/docker-entrypoint.…" 18 seconds ago Up 17 seconds 80/tcp nginx-server

使用docker ps查看运行的容器

$ sudo docker inspect ff6 | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",

使用docker inspect查看容器信息并进行匹配,得到容器的IP地址

$ curl http://172.17.0.2
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.23.1</center>
</body>
</html>

使用curl发起http请求,发现403禁止访问,因为nginx还未配置首页html文件,向上述挂载的宿主机目录下写入一个html文件

$ sudo echo "nginx is working" > /opt/nginx-server/index.html

再次访问:

$ curl http://172.17.0.2
nginx is working

暴露端口

仅仅通过上述流程的话,只有宿主机之外的机器是没办法访问容器的,这时使用端口映射,将宿主机的端口映射到容器的端口上

$ sudo docker run -d -p 8080:80 --name nginx-server-port -v /opt/nginx-server-port:/usr/share/html:ro nginx

使用-p建立端口映射,使用docker ps可以查看到端口信息:

$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a64b2782138 nginx "/docker-entrypoint.…" 13 minutes ago Up 13 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp nginx-server-port

访问通过宿主机的IP:端口就可以访问(如果防火墙没有拦截)

配置文件

启动容器:

$ sudo docker run -d -p 8080:80 --name nginx-server-port -v /opt/nginx-server-port:/usr/share/html:ro nginx
cd94235a9a4d937887b83ff7ff2dcc4323d03db9bea95a145b9314fcba43bf5f

使用docker top查看容器中进程:

$ sudo docker top cd9
UID PID PPID C STIME TTY TIME CMD
root 16969 16948 0 23:16 ? 00:00:00 nginx: master process nginx -g daemon off;
systemd+ 17037 16969 0 23:16 ? 00:00:00 nginx: worker process
systemd+ 17038 16969 0 23:16 ? 00:00:00 nginx: worker process
systemd+ 17039 16969 0 23:16 ? 00:00:00 nginx: worker process
systemd+ 17040 16969 0 23:16 ? 00:00:00 nginx: worker process
systemd+ 17041 16969 0 23:16 ? 00:00:00 nginx: worker process
...

拷贝文件

现在将容器中的Nginx的配置文件拷贝出来

$ sudo mkdir /opt/nginxcon
$ sudo docker cp nginx-server-port:/etc/nginx/nginx.conf /opt/nginxcon/

如上所示拷贝到了nginxcon目录下,使用cat查看

$ sudo cat /opt/nginxcon/nginx.conf 

user  nginx;
worker_processes auto; error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid; events {
worker_connections 1024;
} http {
include /etc/nginx/mime.types;
default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on;
#tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf;
}

写入文件

将配置文件的worker_processes改成2,尝试写回文件

挂载配置文件并且启动容器:

$ sudo docker run -d \
> -p 9090:80 --name nginx-server-conf \
> -v /opt/nginx-server-conf:/usr/share/nginx/html:ro \
> -v /opt/nginxcon/nginx.conf:/etc/nginx/nginx.conf:ro \
> nginx

使用-p建立端口映射,-v挂载目录,此处将配置文件和HTML目录都进行挂载

使用top命令查看:

$ sudo docker top ac4
UID PID PPID C STIME TTY TIME CMD
root 18903 18882 0 23:32 ? 00:00:00 nginx: master process nginx -g daemon off;
systemd+ 18968 18903 0 23:32 ? 00:00:00 nginx: worker process
systemd+ 18969 18903 0 23:32 ? 00:00:00 nginx: worker process

确实只有两个worker process了

在容器中执行一个cat命令也可以查看:

$ sudo docker exec -it nginx-server-conf cat /etc/nginx/nginx.conf

user  nginx;
worker_processes 2; error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid; events {
worker_connections 1024;
}
...

部署Tomcat

官方: https://hub.docker.com/_/tomcat

不暴露端口安装

$ sudo docker run -d --rm tomcat:9.0

直接一个命令进行安装并启动,--rm表示容器停止后就删除这个容器,可以看到容器正在运行:

$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3fbae2e0fd13 tomcat:9.0 "catalina.sh run" About a minute ago Up About a minute 8080/tcp gifted_ptolemy

查看IP地址:

$ sudo docker inspect 3fb | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",

使用curl访问:

$ curl http://172.17.0.2:8080
<!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 404 – Not Found</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Description</b> The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.</p><hr class="line" /><h3>Apache Tomcat/9.0.64</h3></body></html>

页面返回404 Not Found,因为还未创建网站首页,页面没有被发现

暴露端口并添加网页

同样可以使用-p进行端口映射,将宿主机端口映射到容器上,这时通过主机IP地址就可以访问

$ sudo docker run -d -p 8080:8080 -v /opt/tomcat-server:/usr/local/tomcat/webapps/ROOT tomcat:9.0
b5c3ba3f2e94d7fe5d3dd54fa075c3d10b225483e98f2f54976feb744e69a52d

将8080端口进行映射,并且进行目录的挂载

echo "tomcat running" > /opt/tomcat-server/index.html

向宿主机挂载目录写入信息

$ curl http://127.0.0.1:8080
tomcat running

得到了正常的页面

Docker应用部署(Nginx、Tomcat)的更多相关文章

  1. Docker Compose部署 nginx代理Tomcat集群

    一.简介 使用Docker镜像部署Nginx代理的多个Tomcat集群: 使用Dockerfile构建nginx镜像 使用Dockerfile构建tomcat镜像 mysql镜像使用docker hu ...

  2. 使用docker部署nginx+tomcat架构(3):使用docker-compose简化部署操作

    经历了之前的两篇,我们已经大体上了解了docker部署容器的过程. 使用docker部署nginx+tomcat架构 使用docker部署nginx+tomcat架构():访问mysql数据库 不过, ...

  3. 使用docker部署nginx+tomcat架构(2):访问mysql数据库

    上一篇完成了通过docker部署nginx+tomcat的基础软件架构,但是距离一个真正可用的软件架构还差得很远.其中最重要的一点是缺少数据库这个角色的存在,那么本篇就来完善这一点. 废话少说,直接进 ...

  4. 在Docker下部署Nginx

    在Docker下部署Nginx 在Docker下部署Nginx,包括: 部署一个最简单的Nginx,可以通过80端口访问默认的网站 设置记录访问和错误日志的路径 设置静态网站的路径 通过proxy_p ...

  5. 庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群

    庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群 一.简介      前面的两篇文章,我们已经介绍了Net Core项目基于Docker容器部署在Linux服 ...

  6. 阿里云服务器安装Docker并部署nginx、jdk、redis、mysql

    阿里云服务器安装Docker并部署nginx.jdk.redis.mysql 一.安装Docker 1.安装Docker的依赖库 yum install -y yum-utils device-map ...

  7. 使用docker部署nginx+tomcat架构

    架构说明: 使用nginx+tomcat实现动态/静态(资源请求)分离和负载均衡. 参考文档: https://www.runoob.com/docker/docker-tutorial.html 配 ...

  8. kubernetes部署nginx/tomcat

    kubernetes集群已经部署好了,需要的话可以参考之前的文章https://www.cnblogs.com/winter1519/p/10015420.html [root@master tomc ...

  9. Linux运维之docker虚拟化部署nginx

    一.Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱 ...

  10. docker stack 部署nginx

    =============================================== 2018/7/29_第1次修改                       ccb_warlock == ...

随机推荐

  1. MySQL使用bin-log将数据恢复到某个时间点

    binlog的三种模式 statement:记录每一条修改数据的sql row:保存哪条记录被修改 mixed:兼顾前两者的优点. # 查看binlog有没有开启 SHOW VARIABLES LIK ...

  2. npm proxy问题

    检查你的电脑是否需要配置代理,如果不需要可以将代理禁用: npm config set proxy false 如果是需要配置代理服务的: 开启代理 npm config set proxy true ...

  3. 【Rust入门】(一)构建自己的第一个Rust项目

    安装Rust 参考文档,指定安装目录和镜像配置. rustc --version 检查是否安装成功. 构建程序 使用rustc编译运行 rustc 编译:rustc main.js 运行: Windo ...

  4. Java学习笔记(二)环境

     卸载JDK 1.删除java的安装目录 2.删除JAVA_HOME 3.删除path下关于java的目录 4.java -version 配置环境变量 1.我的电脑-->右键-->属性 ...

  5. [问题解决]Win32- OPENFILENAME 结构体报错或者找不到情况

    问题:OPENFILENAME结构体.GetOpenFileName()和 GetSaveFileName()函数都找不到了,在头文件<framework.h>中已经包含<windo ...

  6. MFS分布式存储特性及组件说明

    1.MFS MooseFS是一个具有冗余容错功能的分布式网络文件系统,它将数据分别存放在多个物理服务器或单独磁盘或分区上,确保一份数据有多个备份副本,然而对于访问MFS的客户端或者用户来说,整个分布式 ...

  7. pandas加速读取数据记录csv大文件处理

    def readf(file): t0 = time.time() data=pd.read_csv(file,low_memory=False,encoding='gbk' #,nrows=100 ...

  8. 替代if esle 的高级方法

    if else 是入门最常遇到的一种结构,这种结构简单易懂,深受初学者喜爱.但是 If-Else通常是一个糟糕的选择. 它的可读性差,如果用的太多,会导致结构重构困难.今天我就介绍替代 If-Else ...

  9. 关于Go语言的底层,你想知道的都在这里!

    目录 1. GoLang语言 1.1 Slice 1.2 Map 1.3 Channel 1.4 Goroutine 1.5 GMP调度 1.6 垃圾回收机制 1.7 其他知识点 2. Web框架Gi ...

  10. python内置函数map()

    map()函数 介绍 map()是python的一个内置函数,其作用是返回一个迭代器,该迭代器将function函数应用于可迭代对象的每个项,并产生结果. map函数的语法: map(function ...