Docker常用操作教程

更多文章前往

安装 docker

操作系统: centos7

备份原来的源,并更换阿里源

bash 复制代码
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

yum clean all

yum makecache

安装 yum-utils:(yum-utils 提供 yum-config-manager 功能)

bash 复制代码
yum install yum-utils

安装 device-mapper-persistent-data 和 lvm2 (device mapper 存储驱动程序需要)

bash 复制代码
yum install device-mapper-persistent-data lvm2

添加阿里 docker-ce 源

bash 复制代码
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新 yum 缓存

bash 复制代码
yum makecache fast

安装 docker-ce(大概需要下载 90M)

bash 复制代码
yum install docker-ce

开启 docker

bash 复制代码
systemctl start docker

测试 hello-world 镜像(第一次会从 docker 服务器拉取这个镜像)

bash 复制代码
docker run hello-world

常用命令参数介绍

复制代码
run						启动容器
	-i					交互式操作
	-t					终端
	-d					后台运行
	--name				为这个运行的容器创建别名
	-P(大写)				容器内部的端口映射到本机对应端口(随机)
	-p(小写)				容器内部的端口映射到本机对应端口(自己指定)
	-rm					只运行一次,运行完直接删除这个容器
	-v					绑定一个目录映射到容器里
-------------------------------------------------------------
ps						查看容器
	-a					查看所有容器信息,包括已经停止了的容器
	-l					查看最后一次创建的容器
-------------------------------------------------------------
stop id					停止容器
-------------------------------------------------------------
restart id				重启容器
-------------------------------------------------------------
exec					进入后台运行的容器,出来不会停止容器
      -i                交互式操作
      -t                终端
attach					进入后台运行的容器,出来会停止容器
      -i                交互式操作
      -t                终端
-------------------------------------------------------------
export					导出一个容器的快照
import					导入一个容器的快照
-------------------------------------------------------------
rm 	容器id					删除一个容器
	-f					强制删除
container prune			清除停止状态的容器
------------------------------------------------------------
commit                  将容器导出成镜像
    -p                  导出时暂停容器运行
-------------------------------------------------------------
restart always          每次docker服务启动时,自动将容器启动
-------------------------------------------------------------
login                   登录私仓
    -u                  用户名
    -p                  密码

常用命令

在仓库里搜索:

复制代码
docker search <镜像名>

查看本地有哪些镜像

bash 复制代码
docker images

查看本地启动了哪些容器

bash 复制代码
# 只看还在运行的容器
docker ps

# 看所有容器(包括正在运行的和已经停止的)
docker ps -a

从仓库拉取一个镜像:

复制代码
docker pull <镜像名>:<标签>
例:docker pull centos:centos7

运行一个镜像:

复制代码
docker run centos:centos7

交互式启动容器:

复制代码
docker run -it centos:centos7

后台运行:

复制代码
docker run -itd centos:centos7 bash

启动一个容器在后台运行,并设置容器名称:

bash 复制代码
docker run -itd --namme centos centos:centos7 bash

启动一个容器在后台运行,并映射宿主机目录到容器里:

bash 复制代码
docker run -itd -v ./data:/home/data -v ./log/home/log --namme centos centos:centos7 bash

进入一个后台运行的容器(exec):

复制代码
docker exec -it <容器名/容器id> /bin/bash

进入一个后台运行的容器(attach):

复制代码
# 和 exec 不同,如果使用 attach 进入容器,出来后,容器会自动停止
docker attach -it <容器名/容器id>/bin/bash

运行一次自动删除:

复制代码
docker run --rm -it centos:centos7 echo haha

停止容器

bash 复制代码
docker stop <容器名/容器id>

删除容器(前提是要先停止容器)

bash 复制代码
docker rm <容器名/容器id>

重启容器

bash 复制代码
docker restart <容器名/容器id>

删除没有名字没有标签的镜像(悬空镜像)

bash 复制代码
# 方式一:使用linux组合命令找出镜像名或标签是 none 的镜像,然后删除
docker images | grep '<none>' | awk '{print $3}' | xargs docker rmi


# 方式二:使用docker提供的命令
# 需要手动确定是否要删除
docker image prune

# 不经过询问,类似 yum install -y xxx
docker image prune -f

使用 Dockerfile 打包镜像

bash 复制代码
# 命令格式
docker build -t <目标镜像名>:<目标镜像标签> -f <Dockerfile路径> <上下文路径>

# -f   默认是当前路径下的,名为 Dockerfile 的文件
# <上下文路径>  Dockerfile文件里面的COPY、ADD等命令找源文件就是基于这个上下文路径去找的


# 例子
# 如果你的Dockerfile文件名刚好是 Dockerfile,并且刚好在执行命令的目录下,则不需要指定Dockerfile名称
docker build -t app:v1.0 .

# 如果Dockerfile文件名是其他名字(比如 Dockerfile-001.yml),或者不在执行命令的目录下,则需要用 -f 指定Dockerfile路径
docker build -t app:v1.0 -f /home/test/Dockerfile-001.yml .

修改镜像名和标签

bash 复制代码
docker tag <原名>:<原标签> <目标名>:<目标标签>

删除镜像(前提是基于该镜像创建的容器都已经删除)

bash 复制代码
docker rmi <镜像名>:<标签>

或者

docker rmi 镜像id

将镜像导出成压缩包

bash 复制代码
# 打包成 tar
docker save <镜像名>:<标签> -o <压缩包路径>
# 例如
docker save app:v1.0 -o ./app-v1.0.tar


# 借助 gzip 打包成 tar.gz
docker save <镜像名>:<标签> | gzip > <压缩包路径>
# 例如
docker save app:v1.0 | gzip > ./app-v1.0.tar.gz

加载镜像压缩包

bash 复制代码
docker load -i <压缩包路径>
# 例如
docker load -i ./app-v1.0.tar.gz

登陆私仓(前提是要先将私仓地址加入到 /etc/docker/daemon.json)

假设私仓地址是 192.168.2.102:9002

1、将私仓地址加入到 /etc/docker/daemon.json

json 复制代码
{
   ...
   "insecure-registries": [
        "192.168.2.102:9002"
    ],
   ...
}

2、登录

bash 复制代码
docker login -u <username> -p <password> <仓库ip:port>

推送本地镜像到远程仓库(前提是镜像名前缀刚好是目标远程仓库地址,不然推不了)

bash 复制代码
docker push <镜像名>:<标签>


# 例子
1、假如远程私仓地址是 192.168.2.102:9002
2、在本地打包了一个镜像 app:v1.0 ,想要将这个镜像推送到远程私仓,比如 harbor
3、那我需要先在 harbor 创建一个项目来存放这个镜像,假如创建了项目为 kk_image
4、首先需要先将docker登录到私仓(登录前要记得将私仓地址加入到 /etc/docker/daemon.json)
  docker login -u kk -p kk123456 192.168.2.102:9002
5、将 app:v1.0 改名
  docker tag app:v1.0 192.168.2.102:9002/kk_image/app:v1.0
6、推送
  docker push 192.168.2.102:9002/kk_image/app:v1.0
相关推荐
Linux-lucky9 分钟前
43-Linux学习之旅之Shell 脚本(二)
linux·运维·学习·ubuntu·dash
YH行业报告分析2 小时前
2026电缆铺设设备市场:自动化敷设与电网升级驱动增长
运维·自动化
Wang's Blog3 小时前
Java 项目部署之 Docker工具快速入门: Docker 是什么以及它如何解决部署环境问题
java·开发语言·docker
ajassi20003 小时前
AI语音智能体开发日记(十八)智能体服务器xiaozhi-esp32-server源码部署指南
运维·服务器·人工智能·ai·ai编程
‎ദ്ദിᵔ.˛.ᵔ₎3 小时前
linux 进程信号(下)
linux·运维·服务器
Mikko73 小时前
Linux 磁盘满了但 du 找不到?LVM 扩容 df 不变?fstab 写错开不了机?三台真机实测磁盘排查
linux·运维·centos
蓝胖的四次元口袋3 小时前
Jenkins知识梳理(2)
运维·jenkins
yumgpkpm4 小时前
Acceldata ODP 3.3.6.4 vs CDP Private Cloud Base 7.3.2 对比
大数据·运维·服务器·hadoop·华为·zookeeper·hbase
AIGC大时代4 小时前
LLM Agent 执行沙箱闸门:失败含义与当天最小实验
docker·沙箱·闸门·bubblewrap·llm agent
Liuqy-054 小时前
特殊进程——孤儿、僵尸、守护进程
linux·运维·服务器