Docker、docker-compose常用命令

本文详细记录了一位开发者初次接触Docker,从安装、配置到实际部署项目的全过程。包括如何卸载旧版本Docker,安装新版本,启动和停止Docker服务,以及常用命令如新建、启动容器,查看和管理容器及镜像等。此外,还涉及到了Dockerfile的使用,Docker网络和容器编排工具Docker-compose的介绍。在遇到问题和解决的过程中,作者体验了从困惑到掌握的完整学习曲线。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近很慌的一件事是要在客户的服务器上使用docker容器来部署项目,当时接到这个任务时一脸懵逼,我是谁我在哪;对于还不会docker容器技术的我确实很懵逼,啥也不会;所以最终的结果就是一边学一边部署,从不会到会,到最终上线完成,心情就像是过山车一样,遇到各种问题。好了,废话不多说直接上,这里整理了我在部署时遇到的一些问题,以及在实际部署常用的命令。

docker卸载旧版本

yum remove docker \
		   docker-client \
		   docker-client-latest \
		   docker-common \
		   docker-latest \
		   docker-latest-logrotate \
		   docker-logrotate \
		   docker-engine

docker安装

在安装前检查是否有安装gcc和gcc-c++

安装软件包
yum install -y yum-utils

设置阿里云镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新软件包索引
centos7: yum makecache fast
centos8: yum makecache

安装docker
yum -y install docker-ce docker-ce-cli containerd.io

启动docker
systemctl start docker

查看版本号
docker version

docker卸载

停止docker
systemctl stop docker 

yum remove docker-ce docker-ce-cli containerd.io

rm -rf /var/lib/docker

rm -rf /var/lib/containerd

常用命令

容器:

新建+启动容器
docker run [option] IMAGE [command] [arg...]
option:
	--privileged=true 开启权限 
	--name="容器名称"  为容器指定一个名称
	-d  后台运行容器并返回容器ID
	-i	以交互模式运行容器,通常与-t结合使用
	-t	为容器重新分配一个伪输入终端,通常与-i结合使用
	-p	指定端口映射
eg: docker run -it --privileged=true --name mysql -d -p 3308:3306 --restart unless-stopped -v /data/test/mysql/logs:/var/log/mysql -v /data/test/mysql/data:/var/lib/mysql -v /data/test/mysql/conf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.22

查看所有容器
docker ps -a

进入容器 (前两个常用,如果前两个都进不去,使用第三个)
docker exec -it [container_id]/[container_name] /bin/bash
docker exec -it [container_id]/[container_name] bash
docker exec -it [container_id]/[container_name] sh

退出容器
exit run进入容器,exit退出,容器停止
ctrl+p+q  run进入容器,ctrl+p+q退出,容器不停止

docker start [container_id]/[container_name]    启动容器
docker stop [container_id]/[container_name]		停止容器
docker restart [container_id]/[container_name]  重启容器
docker kill [container_id]/[container_name]		强制停止容器
docker rm [container_id]/[container_name]		删除已停止的容器

一次性删除多个容器实例
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm

查看日志
docker logs [options] [container_id]/[container_name]
options
	--detail 显示更多日志详情
	-f,--follow  显示实时跟踪日志
	--tail=?   显示多少条日志
eg: docker logs -f --tail=300 nginx

查看容器内运行的进程
docker top [container_id]/[container_name]

查看容器内部细节
docker inspect [container_id]/[container_name]

拷贝[复制]文件
docker cp 主机目的文件  [contaiern_id]:容器内的路径
eg: docker cp /data/fuguan/fuguan.sql 7b907e990e0e:/opt/project

导出
docker export [container_id] > 文件名.tar
eg: docker export 7b907e990e0e > xxx.tar

导入
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
eg: cat abc.tar | docker import - abc/nginx:1.18.0

镜像:

查询某个镜像
docker search [xxxx]  

拉取
docker pull 镜像名:版本号
eg: docker pull nginx:1.23.0

查看镜像
docker images

删除镜像
docker rmi 镜像id
eg: docker rmi d4c3cafb11d5

提交镜像
docker commits -m="描述信息" -a="作者" 容器ID要创建的目标镜像名:[标签名]

在连接外网的情况下,安装vim
apt-get update
apt-get -y install vim

创建镜像, 需要结合Dockerfile文件
docker build -t 镜像名 .
eg:docker build -t serve-admin-api .

安装mysql

拉取mysql镜像
docker pull mysql:8.0.22

创建运行容器
docker run -it --privileged=true --name mysql -d -p 3308:3306 --restart unless-stopped -v /data/test/mysql/logs:/var/log/mysql -v /data/test/mysql/data:/var/lib/mysql -v /data/test/mysql/conf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.22

MYSQL_ROOT_PASSWORD  设置MySQL数据库密码

进入MySQL容器
docker exec -it [container_id] /bin/bash

创建数据库
create database topfus_fuguan default character set utf8mb4 collate utf8mb4_unicode_ci;

复制sql文件到数据库容器内
docker cp /data/fuguan/fuguan.sql [container_id]:/

在数据库内执行导入
source fuguan.sql
如果文件是在容器的根目录下直接输入文件名

忘记MySQL数据库root密码

修改root密码:ALTER USER 'root'@'localhost' IDENTIFIED BY 'topFus@Guan123';

# 忘记root密码,重置
# 进入容器
docker exec -it [container_id] bash
# 设置跳过权限表的加载 
# 警告:这就意味着任何用户都能登录进来,并进行任何操作,相当不安全。
echo "skip-grant-tables" >> /etc/mysql/conf.d/docker.cnf
# 退出容器
exit
# 重启容器
docker restart [container_id]
# 再次进入容器
docker exec -it [container_id] bash
# 登录 mysql(无需密码)
mysql -uroot 
# 更新权限
flush privileges;
# 修改密码
alter user 'root'@'localhost' identified by '123456';
# 退出mysql
exit
# 替换掉刚才加的跳过权限表的加载参数
sed -i "s/skip-grant-tables/ /" /etc/mysql/conf.d/docker.cnf
# 退出容器
exit
# 重启容器
docker restart [container_id]

安装Redis

拉取镜像
docker pull redis

创建运行容器
docker run -it --privileged=true --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6399:6379 --name redis -v /data/test/redis/data:/data -v /data/test/redis/conf:/etc/redis/redis.conf -d redis:5.0.14 redis-server /etc/redis/redis.conf --appendonly yes --requirepass 123456

Dockerfile

构建三步骤
1、编写Dockerfile文件
2、docker build 构建镜像
3、docker run 依镜像运行容器实例

基础知识
1、每条保留字指令都必须大写字母且后面至少要跟随一个参数
2、指令按照从上到下,顺序执行
3、#表示注释
4、每条指令都会创建一个新的镜像层并对镜像进行提交

常用指令
FROM 基础镜像,当前镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from
MAINTAINER	镜像维护者的姓名和邮件地址
RUN	RUN是在 docker build时运行
EXPOSE 当前容器对外暴露出的端口
WORKDIR	指定在创建容器后,终端默认登录的进来工作目录,一个落脚
USER 指定该镜像以什么样的用户去执行,如果都不指定,默认root
ENV 用来在构建镜像过程中设置镜像变量
ADD 将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
COPY 类似ADD,拷贝文件和目录到镜像中
VOLUME 容器数据卷,用于数据保存和持久化工作
CMD	指定容器启动后的要干的事情
	Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
ENTRYPOINT 指定一个容器启动时要运行的命令

Docker网络

网络模式
bridge	桥接(默认)
host	直接使用宿主机
none	不为docker配置任何网络
container 
自定义

查看网络模式
docker newwork ls

查看网络源数据
docker network inspect xxx网络名

删除网络
docker network rm xxx网络名

自定义网络
docker network zzyy_network
docker run -d -p 8081:8080 --network zzyy_network  --name tomcat81 billygoo/tomcat8-jdk8

Docker-compose容器编排

官网:https://docs.docker.com/compose/compose-file/compose-file-v3/

安装:
curl -L https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

分配权限
chmod +x /usr/local/bin/docker-compose

查看版本
docker-compose --version

使用Docker-compose.yml文件构建容器

常用命令:
查看帮助
docker-compose -h

启动所有docker-compose服务
docker-compose up

启动所有docker-compose服务并后台运行
docker-compose up -d

停止并删除容器、网络、卷、镜像
docker-compose down

进入容器
docker-compose exec yml里面的服务ID
docker-compose exec yml里面的服务ID /bin/bash

查看所有容器
docker-compose ps

查看进程
docker-compose top

查看容器输出日志
docker-compose logs yml里面的服务ID

检查配置
docker-compose config

检查配置,有问题才输出
docker-compose config -q

重启服务
docker-compose restart

启动服务
docker-compose start

停止服务
docker-compose stop   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

珍朱(珠)奶茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值