目录
- docker常用命令
- docker重启nginx
- 查看环境变量
- 安装jenkins
- 前台运行打包
- 切换后台运行
- docker删除容器
- Nest的docker-compose.yml
- docker-compose up 启动服务
- 遇到的问题
- docker配置mysql、red
docker常用命令
查看Docker容器的命令,可以使用docker ps -a
命令。这将显示所有正在运行或已经停止的容器及其相关信息,包括容器ID、镜像名称、创建时间等。
如果需要获取特定容器的详细信息,可以使用docker inspect <container_id>
命令来查看该容器的配置和状态。
下面是一些常用的Docker容器管理命令示例:
docker run
: 创建并运行新的容器。docker start/stop/restart
: 分别启动、停止和重启指定的容器。docker exec
: 进入到正在运行中的容器内部执行命令。docker logs
: 输出容器的日志信息。docker rm
: 删除不再需要的容器。docker images
: 列出本地主机上存在的镜像。docker pull
: 从互联网上拉取最新版本的镜像。docker push
: 将自定义的镜像推送到互联网上共享。docker build
: 根据 Dockerfile 构建新的镜像。
docker重启nginx
要在Docker中重新启动Nginx容器,可以按照以下步骤进行操作:
-
首先,确保已经安装了Docker并且正在运行。如果没有安装,请根据所使用的操作系统版本参考官方文档进行安装。
-
打开命令行界面(Terminal)或者PowerShell等工具。
-
输入以下命令来查看当前正在运行的Docker容器列表:
docker ps -a
这将显示所有正在运行的容器及其相关信息。
-
从结果中找到名为"nginx"的容器ID或名称。通常情况下,该容器应该处于“Up”状态。
-
若要重新启动Nginx容器,可以使用以下命令:
docker restart <container_id>
查看环境变量
systemctl status docker
启动命令
systemctl start docker
设置自启项
systemctl enable docker.service
检测是否正确安装
docker -v
重启
systemctl restart docker
安装jenkins
1、docker search jenkins 搜索jenkins,并选择合适的版本
2、docker pull jenkins:版本号
3、启动容器
docker run \
-d \ # 标识是让 docker 容器在后台运行
--name my-jenkins \ # jenkins名字
-p 9999:8080 \ # jenkins的默认端口
-p 8888:8888 \
-p 50000:50000 \
--restart=always \
-u root \ # 加上才能在启动容器的时候读写jenkins_home文件的内容
-v /home/jenkins_home:/var/jenkins_home \ # jenkins工作空间目录
jenkins/jenkins:2.222.3-centos # 构建jenkins容器基于的镜像及版本
前台运行打包
docker-compose up
运行完成后大概率会报错,因为我们使用的mysql账号没有权限,所以需要进行设置
切换后台运行
// Ctrl+C 终止程序后执行后台运行命令, 用于本地运行
docker-compose up -d
docker-compose up
正常用来测试本地打包,和第一次构建redis
、mysql
容器,后续需要在本地运行开发模式只需保证redis
、mysql
容器正常运行即可,如需再次打包只需重新构建server容器即可
docker-compose up -d --force-recreate --no-deps --build --remove-orphans server_docker
本地开发模式只需关闭server容器,然后在项目内只需 start:dev即可
docker stop server_docker
npm run start:dev
docker删除容器
把容器和镜像快速删除的方式:
docker-compose down --rmi all
要在Docker中删除容器,可以使用docker rm
命令。
如果想要删除单个容器,只需指定容器的ID或名称作为参数传递给该命令即可。示例如下所示:
docker rm <container_id>
其中, <container_id>
是要删除的容器的ID或名称。
如果想要同时删除多个容器,可以将它们的ID或名称列表作为参数传递给该命令。示例如下所示:
docker rm container1 container2 container3 ...
这样就能同时删除多个容器了。
注意事项:
- 当容器正在运行时无法直接删除,必须先停止容器后才能进行删除操作。
- 若要永久性地删除容器及相关资源(包括存储卷),则应添加
-v
选项来删除与之关联的存储卷。示例如下所示:
docker rm -v <container_id>
docker删除无用镜像
要在Docker中删除无用的镜像,可以使用以下命令行操作:
- 首先,查看当前系统上所有的镜像列表。运行以下命令来获取镜像ID及其标签信息:
docker images -aq --no-trunc | xargs docker inspect --format='{{.Id}} {{.RepoTags}}'
这将显示每个镜像的ID和相关标签信息。
- 根据需求选择要删除的镜像。如果只想删除未被任何容器引用的镜像,则可以通过以下命令进行筛选并删除:
docker rmi $(docker images -f "dangling=true" -q)
该命令会自动识别并删除没有与之关联的容器的镜像。
- 若要删除特定的镜像(不仅限于未被容器引用),可以使用以下命令: 先查docker images -a
docker rmi <image_id>
将 <image_id>
替换为要删除的镜像的完整或部分 ID。
注意事项:
- 确保在删除镜像时小心,因为删除后无法恢复。建议提前备份重要数据。
- 对于正在运行的容器,必须先停止容器才能删除相应的镜像。
1、删除none的镜像(删不掉)
docker rmi 593b81400043
Error response from daemon: conflict: unable to delete 593b81400043 (cannot be forced) - image has dependent child images
2、查找出所有在指定 image 之后创建的 image 的父 image,本示例看得出是同一个依赖镜像
[root@localhost hbase-standalone]#
docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q --filter since=593b81400043)
[hbase-standalone-ws:v1] sha256:bbc8d4c92c1e92f25b5b57e13a5a3eecfc370f34f143234c42f6bb0de6715d63 sha256:85fe3c0f93cd4438570fefd20d6ca4d9346ce5722e16a0c5ba7716816d6debcf
3、删除关联的依赖镜像,关联的none镜像也会被删除
[root@localhost hbase-standalone]# docker rmi bbc8d
Untagged: hbase-standalone-ws:v1
Deleted: sha256:bbc8d4c92c1e92f25b5b57e13a5a3eecfc370f34f143234c42f6bb0de6715d63
Deleted: sha256:554d97feb2cb895a7feddf14f225a36f0aed6e13183e169a3eef45c4e890f5f2
Deleted: sha256:85fe3c0f93cd4438570fefd20d6ca4d9346ce5722e16a0c5ba7716816d6debcf
Deleted: sha256:e5aa2d106cb63f9a817e4325c460080aa1ed88370487acd40c8d50171f565ced
4、再次查看镜像列表,相关镜像已经删除
[root@localhost hbase-standalone]# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
wusong/hbase-hadoop-zoo v1 1c11ea55ee0e 6 days ago 2.62 GB
docker latest 321f2cfcc343 2 weeks ago 152 MB
python 2.7-slim 40792d8a2d6d 8 weeks ago
Nest的docker-compose.yml
version: "3.0"
services:
# docker容器启动的redis默认是没有redis.conf的配置文件,所以用docker启动redis之前,需要先去官网下载redis.conf的配置文件
redis_container: # 服务名称
container_name: redis_container # 容器名称
image: daocloud.io/library/redis:6.0.3-alpine3.11 # 使用官方镜像
# 配置redis.conf方式启动
# command: redis-server /usr/local/etc/redis/redis.conf --requirepass 123456 --appendonly yes # 设置redis登录密码 123456、--appendonly yes:这个命令是用于开启redis数据持久化
# 无需配置文件方式启动
command: redis-server --appendonly yes # 开启redis数据持久化
ports:
- 6379:6379 # 本机端口:容器端口
restart: on-failure # 自动重启
volumes:
- ./deploy/redis/db:/data # 把持久化数据挂载到宿主机
- ./deploy/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf # 把redis的配置文件挂载到宿主机
- ./deploy/redis/logs:/logs # 用来存放日志
environment:
- TZ=Asia/Shanghai # 解决容器 时区的问题
networks:
- my-server_container
mysql_container:
container_name: mysql_container
image: daocloud.io/library/mysql:8.0.20 # 使用官方镜像
ports:
- 3306:3306 # 本机端口:容器端口
restart: on-failure
environment:
MYSQL_DATABASE: mysql_db
MYSQL_ROOT_PASSWORD: 766277
MYSQL_USER: mysql_user
MYSQL_PASSWORD: 766277
MYSQL_ROOT_HOST: '%'
volumes:
- ./deploy/mysql/db:/var/lib/mysql # 用来存放了数据库表文件
- ./deploy/mysql/conf/my.cnf:/etc/my.cnf # 存放自定义的配置文件
# 我们在启动MySQL容器时自动创建我们需要的数据库和表
# mysql官方镜像中提供了容器启动时自动docker-entrypoint-initdb.d下的脚本的功能
- ./deploy/mysql/init:/docker-entrypoint-initdb.d/ # 存放初始化的脚本
networks:
- my-server_container
server_container: # nestjs服务
container_name: server_container
build: # 根据Dockerfile构建镜像
context: .
dockerfile: Dockerfile
ports:
- 9003:9003
restart: on-failure # 设置自动重启,这一步必须设置,主要是存在mysql还没有启动完成就启动了node服务
networks:
- my-server_container
depends_on: # node服务依赖于mysql和redis
- redis_container
- mysql_container
# 声明一下网桥 my-server。
# 重要:将所有服务都挂载在同一网桥即可通过容器名来互相通信了
# 如nestjs连接mysql和redis,可以通过容器名来互相通信
networks:
my-server_container:
本地开发模式只需关闭server容器,然后在项目内只需 start:dev即可
docker stop server_container
npm run start:dev
如果要在Jenkins容器中执行docker命令,那么在创建Jenkins容器时,就需要通过挂载卷形式,将宿主机的docker进程关联到jenkins容器内部,做如下配置后,切换目录执行docker-compose up重新执行yml文件
docker-compose up 启动服务
格式为:
[root@centos01 ~]# docker-compose up [options] [SERVICE...] 该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。
链接的服务都将会被自动启动,除非已经处于运行状态。
可以说,大部分时候都可以直接通过该命令来启动一个项目。
默认情况,docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。
当通过 Ctrl-C 停止命令时,所有容器将会停止。
如果使用 docker-compose up -d,将会在后台启动并运行所有的容器。一般推荐生产环境下使用该选项。
默认情况,如果服务容器已经存在,docker-compose up 将会尝试停止容器,然后重新创建(保持使用 volumes-from 挂载的卷),以保证新启动的服务匹配 docker-compose.yml 文件的最新内容。如果用户不希望容器被停止并重新创建,可以使用 docker-compose up --no-recreate。这样将只会启动处于停止状态的容器,而忽略已经运行的服务。如果用户只想重新部署某个服务,可以使用 docker-compose up --no-deps -d < SERVICE_NAME> 来重新创建服务并后台停止旧服务,启动新服务,并不会影响到其所依赖的服务。
选项:
-d:在后台运行服务容器;
–no-color:不使用颜色来区分不同的服务的控制台输出;
–no-deps:不启动服务所链接的容器;
–force-recreate:强制重新创建容器,不能与 --no-recreate 同时使用;
–no-recreate:如果容器已经存在了,则不重新创建,不能与 --force-recreate 同时使用;
–no-build:不自动构建缺失的服务镜像;
遇到的问题
docker_jenkins:
user: root # root权限
restart: always # 重启方式
image: jenkins/jenkins # 使用的镜像
container_name: jenkins # 容器名称
environment:
- TZ=Asia/Shanghai
- "JENKINS_OPTS=--prefix=/jenkins_home" ## 自定义 jenkins 访问前缀(上下文context)
ports: # 对外暴露的端口定义
- 8080:8080
- 50000:50000
volumes: # 卷挂载路径
- /docker/jenkins_home/:/var/jenkins_home # 挂载到容器内的jenkins_home目录
- /usr/local/bin/docker-compose:/usr/local/bin/docker-compose
- /run/docker.sock:/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
docker配置mysql、redis
在Docker中配置MySQL和Redis是一种常见的开发和部署应用的方式。以下是如何在Docker中配置MySQL和Redis的步骤。
首先,确保你的系统已经安装了Docker。如果还没有安装,可以访问Docker的官方网站下载和安装。
一、配置MySQL
-
拉取MySQL镜像
在Docker中,我们可以直接从Docker Hub上拉取官方的MySQL镜像。运行以下命令:
docker pull mysql:5.7
这将会下载MySQL 5.7版本的镜像。
-
运行MySQL容器
下载完MySQL镜像后,我们可以创建并运行一个MySQL容器。在运行容器时,我们需要设置一些环境变量,比如
MYSQL_ROOT_PASSWORD
,这是root用户的密码。# docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=yourpassword -d mysql:latest
这将会创建并运行一个名为
some-mysql
的MySQL容器,并将root用户的密码设置为my-secret-pw
。 -
连接到MySQL容器
我们可以使用MySQL客户端工具连接到刚才创建的MySQL容器。首先,找到MySQL容器的IP地址:
docker inspect some-mysql | grep IPAddress
然后,使用MySQL客户端工具连接到MySQL容器:
mysql -h <MySQL-Container-IP> -u root -p
输入root用户的密码,就可以成功连接到MySQL容器了。
二、配置Redis
-
拉取Redis镜像
同样地,我们也可以从Docker Hub上拉取官方的Redis镜像。运行以下命令:
docker pull redis
这将会下载最新版本的Redis镜像。
-
运行Redis容器
下载完Redis镜像后,我们可以创建并运行一个Redis容器。
docker run -p 6379:6379 --name some-redis -d redis ```
这将会创建并运行一个名为 `some-redis`的Redis容器。
-
连接到Redis容器
我们可以使用Redis客户端工具连接到刚才创建的Redis容器。首先,找到Redis容器的IP地址:
docker inspect some-redis | grep IPAddress
然后,使用Redis客户端工具连接到Redis容器:
redis-cli -h <Redis-Container-IP>
这样,我们就可以成功连接到Redis容器了。
以上就是在Docker中配置MySQL和Redis的步骤。使用Docker配置这些服务的好处是,可以快速地在任何支持Docker的平台上部署和运行应用,而不需要手动安装和配置这些服务。并且,Docker的隔离性能确保了应用的稳定性和安全性。
使用
Redis服务安装完毕,接下来我们就使用RedisInsight来管理下它试试!
基本使用
-
首先下载RedisInsight的安装包,下载地址:redis.com/redis-enter…
-
下载完成后直接安装即可,安装完成后在主界面选择
添加Redis数据库
;
可视化监控
RedisInsight的Redis监控功能比较简单,个人比较喜欢使用Grafana来监控Redis,Grafana的具体使用可以参考Grafana使用教程 。