Docker 容器操作 (3)
2023-05-06 本文已影响0人
虐心笔记
什么是 docker 容器?
docker 容器是一种轻量级、可移植、自包含的软件执行环境。有文件系统、网络配置和运行库,可以在任何支持 docker 的平台上运行。与传统虚拟化技术(如 virtualbox 或 vmware)不同,在 docker 中创建的容器与宿主机共享同一个内核。这使得 docker 容器更加轻量级、快速启动和停止,更方便部署在云端或本地服务器上。
docker 容器的优势
- 环境一致性:使用 docker 容器可以确保应用在不同环境下的一致性,避免了由于环境差异而导致的运行问题。
- 轻量级高效:docker 容器相对于虚拟机来说更加轻量级、占用资源更少,启动和停止也更快捷,适合于实现微服务架构。
- 可移植性:docker 容器可以在不同的平台、操作系统和云服务中进行部署,非常适合实现跨云供应商应用部署。
- 安全性:docker 容器提供了多种安全特性,如 namespace 隔离、cgroup 限制等,可以有效隔离容器间的进程和资源,提高了应用的安全性。
基本操作
Docker 容器使用一系列的命令来管理容器,这些命令的结构大致分为:
$ docker [OPTIONS] COMMAND [ARG...]
-
docker:
命令是操作 Docker 容器的入口。 -
OPTIONS:
选项用于修改命令的行为,可以省略。 -
COMMAND:
是具体的执行命令,例如run
,start
,stop
,rm
等。 -
ARG:
是命令的参数。
例如,使用 docker container run
命令创建一个新容器时,命令结构为:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-
docker run
是常用来创建并启动一个新容器的命令。 -
OPTIONS
可以包含一些配置信息,如-d
表示在后台运行,-p
表示映射端口等。 -
IMAGE
是指要用来创建容器的镜像名称或 ID。 -
COMMAND
是在容器内部要执行的命令,可以省略。 -
ARG
是传递给COMMAND
的参数,可以省略。
运行状态
- 运行:进程正常运行
- 暂停:进程暂停,CPU不再运行,并不释放内存
- 停止:进程终止,回收进程占用的内存、CPU等资源
常用命令
-
docker run:
创建并运行容器 -
docker pause:
容器暂停 -
docker unpause:
容器从暂停恢复到运行状态 -
docker stop:
停止容器 -
docker start:
启动容器 -
docker rm:
删除已停止的容器,如果需要删除正在运行的则加上-f
-
docker inspect [容器ID]:
查看运行容器的IP地址信息 -
docker logs:
查看容器运行日志信息,携带-f
参数则可以持续查看 -
docker ps:
查看当前运行的容器列表,-a
则查看所有的容器
案例1:创建一个 sonarqube 容器并运行
步骤一:docker hub 查看sonarqube 的容器运行相关命令
$ docker run --name sonar -p 9000:9000 -d sonarqube
命令解读
-
docker run:
创建并运行一个容器 -
--name:
给容器自定义name,eq:sonar -
-p:
将宿主机端口与容器端口映射 //注意左边的是宿主机端口,右边是容器端口。可以理解为当客户端访问宿主机的9000端口则就是访问映射的容器端口9000
-
-d:
后台运行容器 -
sonarqube:
镜像名称
如果创建过程中出现以下错误:
docker: Error response from daemon:driver failed programming external connetivity on endpoint
因为上述环境是在Windows系统的VM虚拟机搭建的docker环境,如果需要主机访问虚拟机中的sonarqube服务,则需要通过VM机设置NAT模式共享主机IP,这种情况下主机与虚拟机是通过防火墙进行路由IP的,而一开始在环境搭建的时候,防火墙都是关闭状态.所以就需要开启防火墙.开启对应的端口.然后重启防火墙和docker服务才能使配置生效.
# 1.检查端口是否占用
$ netstat -tunlp | grep 9000
# 2.检查端口放行情况,如果端口未打开则需要防火墙开放指定端口
$ firewall-cmd --list-all --zone=trusted
# 3.重启防火墙
$ firewall-cmd --reload
# 4.重启docker
$ systemctl restart docker
# 5.创建并运行sonarqube
$ docker run --name sonar -p 9000:9000 -d sonarqube
案例2: 进入sonar 容器,修改 conf 配置信息
步骤一: 以命令行交互的方式进入容器
$ docker exec -it sonar bash
命令解读:
-
docker exec:
进入容器内部,执行某个命令 -
-it:
给当前进入容器创建一个标准输入、输出终端,运行与容器直接交互 -
sonar:
要进入的容器对象名称 -
bash:
进入容器后执行的命令,bash是一个Linux终端交互shell
步骤二:进入sonarqube的配置文件目录
$ cd /opt/sonarqube/conf
步骤三: 修改 soanr.properties 文件信息
# 注意因为容器内部初始化并没有vi相关命令,这里通过sed操作文件修改
$ sudo sed -i 's/#sonar.jdbc.url=jdbc:postgresql://localhost/sonar.jdbc.url=jdbc:postgresql://192.168.1.100/g' /path/to/sonar.properties
# 上述命令将把注释行 #sonar.jdbc.url=jdbc:postgresql://localhost 更改为未注释的行 sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube
以上从案例2可以看出,如果想对容器的相关信息进行修改,非常的不方便,需要进入容器内部进行操作,而且可以发现这种操作的数据不是持久化,当容器再次运行之前的配置信息不会被保存。
容器与数据高度耦合。不便于修改,数据不可复用,升级维护困难。后续将通过数据卷挂载的形式解决