docker镜像启动后端口号是多少_白话Docker—docker run及docker-compose

4e64c889a94470fe90b20688b7bdc033.png

写在前面

前面介绍了用Dockerfile来制作镜像,本篇将用最直白的文字来介绍,如何运行镜像。

在知乎跟新略有点慢请见谅。

用docker运行镜像时,会根据镜像来创建一个容器。举个例子:就像酒杯和酒,酒就是镜像,酒杯就是容器。而平时用的最简单直接的方法有两种:

直接通过docker run命令来运行单个镜像容器。

  1. 通过docker-compose文件来运行一系列镜像容器。

下面分别介绍docker run及docker-compose。

容器的状态关系

容器的使用当中,我们在容器外还需要知道容器的状态,容器共有7种状态,分别是:

  • created(已创建)
  • restarting(重启中)
  • running或up(运行中)
  • removing(迁移中)
  • paused(暂停)
  • exited(停止)
  • dead(死亡)

使用docker ps -a命令,可以查看全部已存在的容器,一般使用当中的状态能看到的有running或up(运行中),restarting(重启中),exited(停止)这3种。如果你一直在重启中,那么大概率是镜像或者容器启动有报错。

这里特别提醒一下:容器状态只有在exited(停止)状态,才允许被移除。所以如果要移除一个正在运行的容器,必须先stop停止这个容器后,才能移除。

23ec34d2d457b66a0f517d98a7ccc7a7.png
状态演示

上图为启动nginx容器后,演示直接删除的报错,以及停止后才能删除。

docker run

使用docker run其实就是用docker命令直接启动容器。基本格式如下:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

以nginx镜像为例,举例如下:

docker run -d --name=test_nginx -p 80:80 -v e:/docker_files:/var/www/html nginx

这个命令是指启动nginx,后台运行,将宿主机的80端口映射到容器的80端口,将宿主机的e:/docker_files目录挂载到容器内的/var/www/html目录,并给这个容器取一个别名叫test_nginx。

3c35c958d29deaf693fa4eafac1d0511.png
docker run启动容器

这里看到容器已经启动成功了,并且是up状态,此时再通过浏览器访问本地80端口:

5367aa3efb63488619387fda43a520df.png
nginx启动成功

说明容器启动成功,完全正常。

再额外解释一下命令的用法意图:

--name:这个是用来给容器取一个别名,方便管理及查看,知道这个容器是用来干什么的,也可以用这个别名代替容器id来操作容器。

-p:映射端口,只有映射端口后,才能保证外网能通过宿主机正确访问到容器。

-v:挂载目录,这个一般是将宿主机的代码目录及一些配置文件,挂载到容器内部。另一种情况是在数据库使用时,需要将容器内的数据目录,挂载到宿主机上,让数据在宿主机上持久保存,否则容器一旦重启,数据就全部重置消失。

这里并没有演示全部的docker run参数,网上有非常多的教程,介绍都非常清楚。故不再额外介绍。

docker-compose

docker-compose启动容器,其实就是通过YML配置文件,来进行容器的参数设置、管理。更方便的是,配置好YML文件后,只需要一行命令,就可以启动一系列的容器。

在windows/mac平台上,docker-compose不用单独安装。不过在linux下,docker-compose就需要单独进行安装,安装方法可以网上查找。

这里直接开始说明docker-compose格式介绍:首先新建一个docker-compose.yml文件,这个是默认文件名,当然也可以换其他文件命。格式如下:

version "3.7"
services:
    XXX:#需要启动的容器服务
    ······#为该容器配置的一系列参数

    XXX2:#需要启动的第二个容器服务
    ······#为该容器配置的一系列参数

其中version是必须存在的格式。我个人一直用的3.7。

docker-compose的配置参数与docker run命令的参数基本一致,个别不同,可以去网上查找相关的参数。

现在来实际举个例子,首先是docker-compose.yml文件:

17d81b5996f399c7d13a9dfa2db27294.png
docker-compose.yml文件

文件中有两个服务,一个nginx_test,一个db。这里解释一下参数:

nginx_test:使用nginx镜像,停止后自动重启,映射端口宿主机的8080到容器内的80,别名为test-nginx,依赖db服务,所以要在db启动后再启动nginx_test。

db:使用mysql镜像,停止后自动重启,映射宿主机的3307端口到容器内的3306,设置容器环境变量,mysql的root密码为123456,设置容器别名为test-db,将宿主机的e:/docker_files/test_mysql目录挂载到容器内/var/lib/mysql目录(实际就是将容器内的mysql数据储存目录挂载到宿主机上)

解释完毕,现在来通过docker-compose up -d来后台启动:

792ed7eb6d5395847e3041fb9daadaf2.png
docker-compose up -d后台启动

可以看到首先创建了一个默认网络,然后先启动的test-db,后启动的test-nginx,这个就是我们想要的效果。再来进行验证:

访问宿主机的8080端口:

7db8d5f876fc1b22172302d97732e50a.png
访问本地8080端口

nginx启动成功,正常,再来访问数据库,端口号3307,账号root,密码为123456:

b5dab565efbff9a0bdeb3cb75bd25507.png
数据库连接成功

连接成功,接着,再看看宿主机目录:

732f3f3fe2acf6380b17333f23c79832.png
宿主机挂载目录

挂载的目录里面已经将mysql容器内的数据目录挂载出来了,说明设置正确!

拓展——容器内互相访问

在容器内,要访问不同的容器服务时,可以直接通过服务名称进行访问,注意,是在容器内访问其他容器服务,比如:我的YML文件中,启动了一个php和一个mysql,services的服务名为php_test,mysql_test。此时我在php_test的容器内需要直接访问mysql_test时,可以直接使用【mysql_test:3306】访问,也可以直接在框架的配置文件中,将数据库连接的hostname设置成容器服务名,在刚才的举例中就设置为mysql_test。

未完待续

非常感谢阅读到这里,到此容器启动使用也介绍了,其实容器的操作还有很多没有在本文中说到,例如通过docker exec命令进入容器,docker logs获取日志等。不过这些命令都很容易理解,且很容易就能查到,而且肯定比我写的还要准确,所以就不再这里耍花枪了。

我在知乎更新的速度要晚一点,如果有想及时获取更新内容的朋友,可以关注下我的个人公众号:狗儿飞。关于docker剩下的内容也不多了,还有一个docker仓库。后面的内容准备整理一下,说一说仓库的大概使用,以及本人使用docker中踩过的一些坑。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值