二、Docker容器

本文详细介绍了Docker容器的管理,包括查看容器状态、启动与停止容器、删除容器,以及如何通过Docker启动容器。还讨论了容器与镜像的关系,并展示了如何进入容器内部进行操作。此外,重点讲解了数据卷的概念和使用,强调了数据卷在容器数据持久化中的重要性,以及如何创建、查看、删除数据卷。最后,提到了如何在容器和宿主机间交互,以及如何查看和处理Docker日志。
摘要由CSDN通过智能技术生成

一、容器

1.1.介绍

简单的说,容器是独立运行的一个或一组应用,以及它们的运行环境。
对应的,虚拟机可以理解为模拟运行的一整套操作系统((提供了运行态环境和其他系统环境)和运行在上面的应用。

1.2.查看容器状态
docker ps//查看运行的容器
docker ps -a l/查看所有的容器(包含运行和退出)
docker container ls
docker container ls-a
1.3.容器与镜像的关系
image-20210921133647716

二、Docker启动容器

启动容器有二种方式,一种是基于镜像新建一个容器并启动,一种是将在终止状态 (stopped)的容器重新启动
docker run参数镜像名称:tag执行的命令

常用参数:

-i保持和docker 容器内的交互,启动容器时,运行的命令结束后,容器依然存活,没有退出(默认是会退出,即停止的)

-t为容器的标准输入虚拟一个tty

-d后台运行容器

–rm容器在启动后,执行完成命令或程序后就销毁

–name给容器起一个自定义名称

-p宿主机:内部端口

docker run --rm -d --name tomcat1 -p 8080:8080 tomcat

docker run --rm -d  --name tomcat8081 -p 8081:8080 tomcat

三、Docker容器停止

3.1.根据id停止
docker stop $id
docker contain stop $id
3.2.根据容器名称停止
docker contain stop $name
docker contain stop $name
3.3.停止所有容器
docker stop $(docker ps -a -q)

四、开启容器

docker start $name/$id

五、 删除容器

删除容器前,该容器不能是启动状态

docker rm $id/$name

删除所有容器

docker rm $(docker ps -a -q)
六、访问tomcat
6.1.开放防火墙端口
Centos防火墙端口
开放8080端口(如下命令只针对Centos7以上)查看已经开放的端口:
firewall-cmd --list-ports
开启端口:
firewall-cmd --zone=public --add-port=8088/tcp --permanent关闭端口:
firewall-cmd --permanent --zone=public --remove-port=8080/tcp开启防火墙:
systemctl start firewalld
重启防火墙:
firewall-cmd --reload #重启
firewall systemctl stop firewalld.service #停止
firewall systemctl disable firewalld.service #禁止firewall开机启动
centos 7 docker 启动了一个web服务,但是启动时报错 WARNING: IPv4 forwarding is disabled. Networking will not work.

#需要做如下配置

解决办法:

vi /etc/sysctl.conf

net.ipv4.ip_forward=1  #添加这段代码

#重启network服务

systemctl restart network && systemctl restart docker

#查看是否修改成功 (备注:返回1,就是成功)

[root@docker-node2 ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

登陆页面

image-20210923215930801

七、进入容器内部

某些时候需要进入容器进行操作,使用docker exec命令
-i -t参数
docker exec后边可以跟多个参数,这里主要说明it参数。
只用i参数时,由于没有分配伪终端,界面没有我们熟悉的Linux命令提示符,但命令执行结果仍然可以返回。
当-it参数一起使用时,则可以看到我们熟悉的 Linux命令提示符。
docker exec -it 容器ID (Names) bash

7.1进入tomcat安装目录添加index.html页面
[root@node01 ~]# docker run -d --name tomcat1 -p 8080:8080 tomcat
709a9d2af01a0a9a4f61fe173260a7e084d10b5632ace721a2c3fb286db0a95e
[root@node01 ~]# docker exec -it tomcat1 bash
root@709a9d2af01a:/usr/local/tomcat# cd webapps
root@709a9d2af01a:/usr/local/tomcat/webapps# mkdir ROOT
root@709a9d2af01a:/usr/local/tomcat/webapps# echo "Hi,Docker!" > ./ROOT/index.html
root@709a9d2af01a:/usr/local/tomcat/webapps# 

登录tomcat查看页面

image-20210923220519725

八、容器和宿主机交互

8.1.语法

在宿主机和容器之间交换文件在宿主机和容器之间相互COPY文件cp的用法如下

docker cp [OPTIONS] CONTAINER:PATH LOCALPATH  //容器中复制到宿主机

docker cp [OPTIONS] LOCALPATH CONTAINER:PATH //宿主机复制到容器中

宿主机复制一个图片到容器中:将png图片复制到了容器指定目录下

docker cp 1.png tomcat1 : /usr/local/tomcat/webapps/ROOT

将容器内的index.jsp复制出来,修改再复制回去

docker cp tomcat1 : /usr/local/tomcat/webapps/ROOT/index.jsp /root

九、Docker日志

9.1.Docker查看日志

docker logs容器名称/ID

docker logs -f -t --since="2018-12-1" --tail=10 容器名称

–since :此参数指定了输出日志开始日期,即只输出指定日期之后的日志。

-f:查看实时日志

-t:查着日志产生的日期

-tail=10:查看最后的10条日志

docker logs -f --tail=10 容器名称   //查看最后十行

十、数据卷

问题:通过镜像创建一个容器。容器一旦被销毁,则容器内的数据将—并被删除。但有些情况下,通过服务器上传的图片出会丢失。容器中的数据不是持久化状态的。

那有没有一种独立于容器、提供持久化并能服务于多个容器的东西呢?

什么是数据卷

数据卷:是一个可供一个或多个容器使用的特殊目录、

特性:

数据卷可以在容器之间共享和重用对数据卷的修改会立马生效。对数据卷的更新,不会影响镜像数据卷默认会一直存在,即使容器被删除

image-20210925124435570

为什么需要数据卷?

这得从docker容器的文件系统说起。出于效率等一系列原因,docker容器的文件系统在宿主机上存在的方式很复杂,这会带来下面几个问题:

不能在宿主机上很方便地访问容器中的文件。无法在多个容器之间共享数据。当容器删除时,容器中产生的数据将去失。

为了解决这些问题,docker引入了数据卷(volume)机制。数据卷是存在于一个或多个容器中的特定文件或文件夹,这个文件或文件夹以独立于docker文件系统的形式存在于宿主机中。

数据卷的最大特定是:其生存周期独立于容器的生存周期。

使用数据卷的最佳场景

在多个容器之间共享数据,多个容器可以同时以只读或者读写的方式挂载同一个数据卷,从而共享数据卷中的数据。宿主机不能保证一定存在某个目录或一些固定路径的文件时,使用数据卷可以规避这种限制带来的问题。
当你想把容器中的数据存储在宿主机之外的地方时,比如远程主机上或云存储上。当你需要把容器数据在不同的宿主机之间备份、恢复或迁移时,数据卷是很好的选择。

数据卷应用

  1. 创建数据卷

    docker volume create 数据卷名称
    

    创建数据卷之后,默认会存放到目录: /var/lib/docker/volume/数据卷名称/ data目录下

  2. 查看数据卷

    docker volume inspect 数据卷名称
    
  3. 查看全部数据卷信息

    docker volume ls
    
  4. 删除数据卷

    docker volume rm 数据卷名称
    
  5. 应用数据卷
    当你映射数据卷时,如果数据卷不存在,Docker会帮你自动创建

    docker run -v 数据卷名称:容器内路径镜像ID
    

    直接指定一个路径作为数据卷的存储位置

    docker run -v 路径:容器内部的路径镜像ID
    
案例

为tomcat的webapp目录下创建数据卷

echo 'hi docker' > /root/docker-data/ROOT/index.html

docker run -d --name tomcat-8080 -p 8080:8080 -v /root/docker-data/:/usr/local/tomcat/webapps/ tomcat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值