从零开始学Docker-Day3

本文详细介绍了如何在Docker容器中部署MySQL、Tomcat、Nginx和Redis,并通过端口映射让外部机器访问。同时讨论了Docker镜像的原理和制作方法,以及Dockerfile在构建自定义镜像中的应用。
摘要由CSDN通过智能技术生成

Docker的应用部署

MySQL部署

在Docker容器中部署MySQL,并通过外部mysql客户端操作MySQL Server。

1.容器内部的网络服务和外部机器不能直接通信

2.外部机器和宿主机可以直接通信

3.宿主机和容器可以直接通信

将容器中的3306端口与宿主机的3307端口 进行映射 然后让外部机器访问 宿主机的端口

实现步骤

#1.搜索mysql镜像
docker search mysql
#2.拉取mysql镜像
docker pull mysql:5.7

创建容器,设置端口映射,目录映射

# 在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysql
docker run -id \
-p 3307:3306  \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs  \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7
  • 参数说明
    • -p 3307:3306 将容器的3306端口映射到宿主机的3307端口。
    • -v $PWD/conf:/etc/mysql/conf.d 将主机当前目录下的conf/my.cnf 挂载到容器的/etc/mysql/my.cnf 配置目录下
    • -v $PWD/logs:/logs 将主机当前目录下的logs目录挂载到容器的logs。日志目录
    • -v $PWD/data:/var/lib/mysql 将主机当前目录下的data目录挂载到容器的var/lib/mysql 数据目录
    • -e MYSQL_ROOT_PASSWORD=123456 mysql初始化root用户的密码

4.操作容器中的mysql

Tomcat部署

需求:在Docker容器中部署Tomcat,并通过外部机器访问Tomcat部署的项目。

实现步骤
#搜索tomcat镜像
docker search tomcat
#拉去tomcat镜像
docker pull tomcat
创建容器,设置端口映射,目录映射
# 在/root目录下创建tomcat目录用于存储tomcat数据信息
mkdir  ~/tomcat
cd  ~/tomcat
docker run -id  --name=c_tomcat \
-p 8080:8080 \
-v  $PWD:/usr/local/tomcat/webapps \
tomcat
  • 参数说明
    • -p 8080:8080 将容器的8080端口映射到主机的8080端口
    • -v $PWD:/usr/local/tomcat/webapps 将主机中当前目录挂载到容器的webapps

测试访问

此时的tomcat目录下没有任何文件

我们创建一个/test/index.html

使用外部机器访问tomcat

Nginx部署

在Docker容器中部署Nginx,并通过外部机器访问Nginx

实现步骤

#1.搜索nginx镜像
docker search nginx
#2.拉取nginx镜像
docker pull nginx

创建容器,设置端口映射,目录映射

# 在/root目录下创建nginx目录用于存储nginx数据信息
mkdir ~/nginx
cd   ~/nginx
mkdir  conf
cd conf
#在~/nginx/conf下创建nginx.conf文件,粘贴下面的内容
vim  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;
                                                   1,0-1        顶端

Redis部署

#搜索redis镜像
docker  search redis
#拉取redis镜像
docker pull redis:5.0
#创建容器,设置端口映射
docker run  -id --name=c_redis  -p  6379:6379 redis:5.0
#使用外部机器连接redis
./redis-cli.exe  -h 192.168.21.184 -p  6379

 

Docker镜像层都是只读的,容器层是可写的

当容器启动是,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”

,”容器层“之下的都叫镜像层

思考:

  • Docker镜像本质是什么?
    • 是一个分层文件系统

采用分层结构就是为了共享资源,方便复制迁移,就是为了复用,比如说有多个镜像都从base镜像构建而来,那么Docker Host只需要在磁盘上保存一份base镜像,同时也只需要加载一份base镜像,就可以为所有容器服务了,而且镜像的每一层都可以被共享

  • Docker中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个G?
    • Centos的iso镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层
  • Docker中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70多MB?
    • 由于docker中镜像是分层的,tomcat虽然只有70多MB,但他需要依赖于父镜像和基础镜像,所有钟哥对外暴露的tomcat镜像大小为500MB
操作系统组成部分:
  • 进程调度子系统
  • 进程通信子系统
  • 内存管理子系统
  • 设备管理子系统
  • 文件管理子系统
  • 网络通信子系统
  • 作业控制子系统

linux文件系统由bootfs和rootfs两部分组成
  • bootfs:包含bootloader(引导加载程序)kennel(内核)
  • rootfs:root文件系统,包含的典型就是linux系统中的、dev,/proc,/bin,/etc等标准目录和文件
  • 不同的linux发行版,bootfs基本一样,而rootfs不同,如ubuntu,centos等
Docker镜像原理
  • Docker镜像是由特殊的文件系统叠加而成
  • 最低端的是bootfs,并使用宿主机的bootfs
  • 第二层是root文件系统rootfs,称为base image
  • 然后在往上可以叠加其他的镜像文件
镜像

是一种轻量级,可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码,运行时需要的库,环境变量和配置文件等),这个打包好的环境就是images镜像文件。

只有通过这个镜像文件才能生成Docker容器实例(类似java中的new出来一个对象)。

UnionFS(联合文件系统):Union

Docker镜像是如何制作的

1.容器转为镜像

docker commit 容器id  镜像名称:版本号
docker save -o  压缩文件名称  镜像名称:版本号
docker load -i  压缩文件名称


2.dockerfile

Dockerfile概念
  • Dockerfile是一个文本文件
  • 包含一条条的指令
  • 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
  • 对于开发人员:可以为开发团队提供一个完全一致的开发环境
  • 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作
  • 对于运维人员:再部署时,可以实现应用的无缝移植
案例
自定义centos7镜像。要求:

1.默认登录路径为/usr

2.可以使用vim

实现步骤
  1. 定义父镜像:FROM centos:7
  2. 定义作者信息:MAINTAINER xcl<itcxuchuanlong@itcast.cn>
  3. 执行安装vim命令:RUN yum install -y vim
  4. 定义容器启动执行命令:CMD/bin/bash
  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值