CentOS 7安装docker 及docker 不能被外网访问的问题

uname -r 查看linux内核版本。要求linux内核版本是3.1.0以上。

netstat -tuln | grep 53  查看端口

docker安装:

以下是下载最新的docker的方式:

对于 CentOS 系统:

  1. 安装所需的软件包:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

2.设置 Docker 的存储库:

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3. 安装 Docker:

sudo yum install docker-ce docker-ce-cli containerd.io

4.启动 Docker 服务:

sudo systemctl start docker

5.验证 Docker 是否正确安装,运行以下命令检查 Docker 版本:

docker version

随机启动

sudo chkconfig docker on

或者

#安装 yum 源 docker 的

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

#安装 docker

yum -y install docker-ce-18.06.1.ce-3.el7

#启动

docker systemctl enable docker && systemctl start docker

#效验安装

docker -version

注意:

镜像:

docker的一些镜像文件一般都放在宿主机的/var/lib/docker/这个文件下面。
cd /var/lib/docker/

容器

容器放在containers中

 

进入容器的文件夹可以看看有很多文件

du -sh *

查看各个文件的大小

 可以看到其实每个文件都不大,就几十KB大小。

但是当我们看到docker images 的时候是很大很大的

 这是为什么呢?

Docker 使用  (仓库  容器   镜像)

镜像相关

搜索镜像: docker search java   ( 和在https://hub.docker.com/网站中搜索的结果相同,这个地址就是docker的仓库)

下载镜像:docker pull java:8

                  docker pull nginx:1.14

列出本地镜像:docker images

删除镜像:docker rmi java:8

容器相关

新建并启动容器

docker run -d -p 91:80 nginx:1.14    (-d 后台运行  -p )  将nginx:1.14这个镜像放到我们的容器里面                                                                                        并且运行起来

docker run -d -p 91:80 nginx不写tag的话,就是latest

还有一个很重要的点:文件挂载:

docker run -d -p 8088:8081 -v /v5:/v5_log  --name v5 02_service_crud-0.0.1:xss

-v  表示挂载

/log是宿主机的路径

/docker_log是docker容器中的路径

docker中的数据文件变化了,会同步到宿主机中(这里很重要,比如mysql的data数据等等)

docker中的目录如下:

宿主机上的目录如下:可以按到同步了,无论是哪一方变化了,另外一方都会跟着变化。

 

列出容器

docker ps

启动/停止容器

docker start/stop <容器id>

查看容器信息

docker inspect <容器id>

进入容器

docker container exec -it <容器id> /bin/bash

退出:exit;

查看日志:

docker contailner log <容器id>

 

 详细说说91->80的含义:每个container起始都是一个小虚拟机,nginx镜像被放在这个小虚拟机上运行,nginx的对应端口就是80,小虚拟机是运行在我们真正的虚拟机上的,我们通过l浏览器访真正虚拟机的91端口其实就能访问docker容器上的80端口进而访问nginx。

使用docker启动springboot项目的jar包

1. vim Dockerfile

注意:这个文件必须这样命名:Dockerfile

2.在Dockerfile文件中:添加以下内容:

我参照上面的步骤自己做了一个练习,步骤如下:

1.用Dockerfile文件构建Docker镜像(实际文件中是From java:8u111-jdk )

From java:6b38
Add 02_service_crud-0.0.1-SNAPSHOT.jar /app.jar
EXPOSE 8888
ENTRYPOINT ["java","-jar","/app.jar"]

2.用docker build命令构建镜像

docker build  -t 02_service_crud-0.0.1:xss .

(注意:不要忘记后面的.)(自己的镜像名称还不能含有大写字母)

 之后docker ps 就看到了本地仓库有了我们自己的镜像,这是一个基于java的Springboot应用

3.启动镜像(注意:基于文章末尾出现的错误,我这里用了--net=host)

docker run --net=host --name=crud-service 02_service_crud-0.0.1:xss -d

 但是我这里报了一个这样的错:

 ChatGPT一下:

 于是修改了Dockerfile文件 

 改成了From java:8u111-jdk 

之后将自己刚刚构建的镜像删除,镜像删除之前一定要把对应的容器删除

ok,之后重新构建

又有问题了

df -h  了一下,磁盘空间被占满了

du -h -x --max-depth=1 不断地看那个文件被沾满。清理磁盘。之后再次构建。

或者du -sh *

 构建成功了。

4.启动,浏览器访问

 =========================================================================

学习docker遇到的问题:

1 .环境:电脑windows11 ,虚拟机centos7 ,  docker 容器 ,nginx镜像

开始我是这样启动:docker run -d -p 91:80

nginx服务是up的

结果在windows上的浏览器中访问不到docker中的nginx  虚拟机上curl也访问不到,这是为啥啊?

宿主机上访问docker还报出来这样会一个错:

解决方案:

docker run --net=host -d --name=hello_nginx nginx:1.18
使用--net=host即可,但是这样有个问题,

WARNING: Published ports are discarded when using host network mode

如果我再一次运行docker run --net=host -d --name=hello_nginx1 -p 90:80  nginx:1.18 的话,其实这个服务是起不来的,就像下图中的Exited这个服务(当然也有解决方法,比如通过配置文件修改端口,未完待续。。。)

2 .清理:docker system prune -a

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值