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
相关推荐
藥瓿亭9 分钟前
K8S认证|CKS题库+答案| 7. Dockerfile 检测
运维·ubuntu·docker·云原生·容器·kubernetes·cks
搬码临时工34 分钟前
如何把本地服务器变成公网服务器?内网ip网址转换到外网连接访问
运维·服务器·网络·tcp/ip·智能路由器·远程工作·访问公司内网
容器魔方36 分钟前
KubeCon 抢鲜 | Kmesh与你共创高性能流量治理更优方案
云原生·容器·云计算
Guheyunyi1 小时前
监测预警系统重塑隧道安全新范式
大数据·运维·人工智能·科技·安全
杰哥技术分享2 小时前
在 CentOS 上安装 Docker 和 Docker Compose 并配置使用国内镜像源
linux·docker·centos
知更鸟呆呆2 小时前
【Linux操作系统】基础开发工具(yum、vim、gcc/g++)
linux·运维·vim
Gold Steps.2 小时前
Docker容器部署elasticsearch8.*与Kibana8.*版本使用filebeat采集日志
运维·docker·云原生·es
m0_637146933 小时前
C语言基础面试问答
运维·服务器
ricky_fan3 小时前
window下配置ssh免密登录服务器
运维·服务器·ssh
地衣君4 小时前
Ubuntu 配置使用 zsh + 插件配置 + oh-my-zsh 美化过程
linux·运维·ubuntu