某不知名博客 某不知名博客
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carsaid

安全界的小学生
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前言

    • 前言
  • 学习建议

  • Docker命令大全
    • Docker配置文件
      • /etc/docker/daemon.json
      • /usr/lib/systemd/system/docker.service
    • 查看
      • docker ps
      • docker top
      • docker info
      • docker logs
      • docker port
      • docker images
      • docker inspect
      • docker history
    • 容器管理
      • docker rm
      • docker run
      • docker pull
      • docker stop
      • docker restart
      • docker container
      • docker attach / docker exec
    • 镜像管理
      • docker rmi
      • docker tag
      • docker build
      • docker commit
      • docker push
    • 导入/导出
      • docker export
      • docker import
      • docker save
      • docker load
    • 网络
      • docker network ls
      • docker network create
    • 配置文件
      • /etc/docker/daemon.json
    • 仓库管理
      • docker push
      • docker login
      • docker logout
      • docker search
      • 镜像registry搭建私有仓库
      • harbor搭建私有仓库
    • Dockerfile
      • COPY
      • ADD
      • CMD
      • ENTRYPOINT
      • ENV
      • ARG
      • VOLUME
      • EXPOSE
      • WORKDIR
      • USER
      • HEALTHCHECK
      • ONBUILD
      • LABEL
      • MAINTAINER
    • Docker Compose
      • docker-compose up
  • Kubernetes教程

  • CKS教程

  • 云原生安全
carsaid
2023-11-05
目录

Docker命令大全

个人总结

参考1:https://www.runoob.com/docker/docker-command-manual.html、参考2:《CKA/CKAD应试指南》

- name: 个人总结
  desc: 参考1:https://www.runoob.com/docker/docker-command-manual.html、参考2:《CKA/CKAD应试指南》
  bgColor: '#F0DFB1'
  textColor: 'green'
1
2
3
4

# Docker配置文件

# /etc/docker/daemon.json

{
	"registry-mirrors": ["https://xxx.com"],		// 镜像源
	"insecure-registries": ["192.168.80.10:5000"]	// 设置docker可以通过 http:// 协议访问
}
1
2
3
4

# /usr/lib/systemd/system/docker.service

系统服务文件/usr/lib/systemd/system/docker.service

# 查看

# docker ps

  • 查看正在运行的容器列表

  • -a

    • 列出所有容器,包括停止运行的
  • -l

    • 列出最后一次创建的容器
  • CONTAINER ID(容器 ID)

  • IMAGE(使用的镜像)

  • COMMAND(启动容器时运行的命令)

  • CREATED(容器的创建时间)

  • STATUS(容器状态)

    • created(已创建)
    • restarting(重启中)
    • running 或 Up(运行中)
    • removing(迁移中)
    • paused(暂停)
    • exited(停止)
    • dead(死亡)
  • PORTS(容器的端口信息和使用的连接类型(tcp/udp))

  • NAMES(自动分配的容器名称)

docker ps
1

# docker top

  • 查看容器内部运行的进程
docker top XXXXXX
1

# docker info

  • 查看docker环境
docker info

# 查看docker源
docker info | grep registry -i
1
2
3
4

# docker logs

  • 查看指定容器内的标准输出
  • -f
    • 跟踪日志输出
    • 类似tail -f
docker logs XXXXXX
docker logs NAME

docker logs -f XXXXXX
1
2
3
4

# docker port

  • 查看一个容器的端口映射
docker port XXXXXX
docker port NAME
1
2

# docker images

  • 列出本地主机上的镜像
    • REPOSITORY
      • 镜像的仓库源
    • TAG
      • 镜像的标签
    • IMAGE ID
      • 镜像ID
    • CREATED
      • 镜像创建时间
    • SIZE
      • 镜像大小
  • -q
    • 只显示镜像id,不会显示太多信息
docker images
docker images -q
1
2

# docker inspect

  • 查看一个容器的底层Docker信息
docker inspect XXXXXX
1

# docker history

  • 查看一个镜像的层结构(修改历史)
docker history 镜像名
1

# 容器管理

# docker rm

  • 删除容器
  • -f
    • 强制删除正在运行的容器
docker rm -f XXXXXX
1

# docker run

  • 运行一个容器
  • -i
    • 允许你对容器内的标准输入进行交互(Stdin)(交互式操作)
  • -t
    • 在新容器内,指定一个伪终端或终端(终端)
  • exit / Ctrl+D
    • 退出一个容器的交互模式
  • -d
    • 在后台运行并打印容器ID
    • 加了-d参数,默认不会进入容器
  • -c
    • 指定容器要运行的命令
  • --name
    • 指定容器的名称
  • -P
    • 将容器内部使用的网络端口,随机映射到我们使用的主机上
  • -p
    • 指定容器和主机映射的端口
  • --network
    • 指定容器使用的网络
    • 可以使用docker network ls查看
  • --rm
    • 容器退出时,自动清理容器内部的文件系统
  • -h / --hostname
    • 设置容器的主机名
    • 还会同时写入容器内的/etc/hostname和/etc/hosts
  • --dns
    • 添加DNS服务器到容器的/etc/resolv.conf中
  • --dns-search
    • 设置容器的搜索域
    • 当搜索域为example.com时,搜索一个名为host的主机,DNS不仅搜索host,还会搜索host.example.com
  • -v
    • -v /dir1
      • 物理机的目录/var/lib/docker/volumes/ID/_data(ID是随机生成的)
      • 挂载到容器的/dir1目录里
    • -v /dir2:/dir1
      • 在物理机里指定目录/dir2
      • 映射到容器的/dir1目录里
      • 如果目录不存在,自动创建
    • -v /dir2:/dir1:rw
      • 读写挂载(默认)
    • -v /dir2:/dir1:ro
      • 只读挂载
  • --link
    • 连接一个容器,并设置别名
docker run ubuntu:15.10 /bin/echo "Hello World"

docker run -i -t ubuntu:15.10 /bin/bash

docker run -d ubuntu:15.10 /bin/bash -c "while true; do echo hello world; sleep 1; done;"

docker run -itd --name ubuntu-test ubuntu /bin/bash

docker run -d -P training/webapp python app.py
docker run -d -p 5000:5000 training/webapp python app.py

# 连接容器db, 设置别名为mysqlxx, 在后续命令中可以使用"mysqlxx"这个主机名进行操作
docker run -itd --link db:mysqlxx -e WORDPRESS_DB_HOST=mysqlxx wordpress
1
2
3
4
5
6
7
8
9
10
11
12
13

# docker pull

  • 从源获取/载入一个镜像
  • 如果不指定镜像的版本标签,Docker将默认使用ubuntu:latest镜像
  • 使用一个不存在的镜像时,Docker将会自动下载这个镜像
docker pull ubuntu

docker pull ubuntu:15.04
1
2
3

# docker stop

  • 停止一个容器
docker stop XXXXXX
docker stop NAME
1
2

# docker restart

  • 重启一个容器
docker restart XXXXXX
1

# docker container

  • 管理容器列表
  • prune
    • 清除所有处于终止状态的容器
docker container prune
1

# docker attach / docker exec

  • 进入一个容器
    • attach在退出容器时,会终止容器的运行
    • exec在退出容器时,容器会继续运行
  • --user
    • 以XXX用户进入容器
docker attach XXXXXX

docker exec -it XXXXXX /bin/bash
docker exec -it --user=root XXXXXX /bin/bash
1
2
3
4

# 镜像管理

# docker rmi

  • 删除镜像
docker rmi ubuntu:15.10
1

# docker tag

  • 为镜像添加一个新的标签
docker tag XXX runoob/centos:dev

REPOSITORY                  TAG                 IMAGE ID   CREATED             SIZE
runoob/centos               6.7                 XXX        About an hour ago   190.3 MB
runoob/centos               dev                 XXX        About an hour ago   190.3 MB
1
2
3
4
5

# docker build

  • 根据Dockerfile构建一个新的镜像
    • -t
      • 指定创建的镜像(镜像名称:镜像标签)
    • .
      • Dockerfile的上下文路径,.表示当前目录下
  • 需要创建Dockerfile文件
    • 其中包含一组指令,来告诉docker如何构建镜像
    • 每一个指令都会在镜像上创建一个新的层,每一个指令的前缀必须是大写
  • FROM
    • 指定使用的镜像源
  • RUN
    • 在镜像内执行的命令
vim Dockerfile

FROM	centos:6.7
MAINTAINER	Fisher "fisher@sudops.com"
RUN		/bin/echo 'root:123456' | chpasswd
RUN		useradd runoob
RUN		/bin/echo 'runoob:123456' | chpasswd
RUN		/bin/echo -e "LANG=\"en_US.UTF-8\"" > /etc/default/local

EXPOSE	22
EXPOSE	80

CMD		/usr/sbin/sshd -D
1
2
3
4
5
6
7
8
9
10
11
12
13
docker build -t centos:v2 .
1

# docker commit

  • 提交一个容器副本,创建镜像
  • -m
    • 提交的描述信息
  • -a
    • 镜像的作者
  • XXX
    • 容器ID
  • runoob/ubuntu:v2
    • 创建的镜像名称
docker run -it ubuntu:15.10 /bin/bash
    apt-get update
    exit

docker commit -m="has update" -a="runoob" XXX runoob/ubuntu:v2

docker images

docker run -it runoob/ubuntu:v2 /bin/bash
1
2
3
4
5
6
7
8
9

# docker push

  • 推送一个镜像到镜像服务器
docker tag centos:v1 192.168.80.10:5000/xxx/centos:v1
docker push 192.168.80.10:5000/xxx/centos:v1
1
2

# 导入/导出

# docker export

  • 导出一个容器快照
docker export XXXXXX > ubuntu.tar
1

# docker import

  • 导入一个容器快照文件(本地或URL)
# 导入一个容器快照文件,到镜像test.ubuntu:v1
cat ubuntu.tar | docker import - test/ubuntu:v1

docker import http://example.com/xxxpro
1
2
3
4

# docker save

  • 导出镜像到本地文件
docker save -o test.tar test/ubuntu:v1

docker save 镜像名 > file.tar
docker save 镜像名1 镜像名2 ... > file.tar
1
2
3
4

# docker load

  • 导入一个镜像
docker load < test.tar

docker load -i 文件名
1
2
3

# 网络

# docker network ls

  • 查看网络列表
docker network ls
1

# docker network create

  • 新建网络
  • -d
    • 网络类型
    • bridge或overlay
docker network create -d bridge test123
1

# 配置文件

# /etc/docker/daemon.json

  • 设置所有容器的配置
# 配置所有容器的DNS为114.114.114.114和8.8.8.8(容器启动时自动设置)

vim /etc/docker/daemon.json

{
	"dns": [
		"114.114.114.114",
		"8.8.8.8"
	]
}
1
2
3
4
5
6
7
8
9
10

# 仓库管理

# docker push

  • 用户登录Docker Hub后,可以使用docker push将自己的镜像推送到Docker Hub
    • username应为自己的用户名
docker tag ubuntu:18.04 username/ubuntu:18.04

docker push username/ubuntu:18.04

docker search username/ubuntu
1
2
3
4
5

# docker login

  • 登录Docker Hub
    • https://hub.docker.com/
docker login
	输入账号密码
1
2

# docker logout

  • 退出Docker Hub登录状态
docker logout
1

# docker search

  • 从Docker Hub上搜索镜像源
  • NAME
    • 镜像仓库源的名称
  • DESCRIPTION
    • 镜像的描述
  • OFFICIAL
    • 是否是docker官方发布
  • stars
    • 类似Github里的star,表示点赞
  • AUTOMATED
    • 自动构建
docker search httpd

INDEX       NAME                                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/httpd                                   The Apache HTTP Server Project                  4216      [OK]  
docker.io   docker.io/centos/httpd-24-centos7                 Platform for running Apache httpd 2.4 or b...   44              
docker.io   docker.io/centos/httpd                                                                            35                   [OK]
1
2
3
4
5
6

# 镜像registry搭建私有仓库

  • 修改配置文件/etc/docker/daemon.json
    • 允许http方式访问
  1. 使用镜像registry运行容器,端口5000
docker run -d --name myreg -p 5000:5000 --restart=always -v /myreg:/var/lib/registry registry

# 使用国内源
docker run -d --name myreg -p 5000:5000 --restart=always -v myreg:/var/lib/registry hub.c.163.com/library/registry
1
2
3
4
  1. 给镜像做标签
# docker tag <镜像名:标签> <仓库地址:端口/镜像地址:标签>

docker tag centos:latest 192.168.80.10:5000/xxx/centos:v1
1
2
3
  1. 推送镜像
docker push 192.168.80.10:5000/xxx/centos:v1
1
  1. 查看和下载镜像
# 安装工具jq
yum install jq

curl -s http://192.168.80.10:5000/v2/_catalog | jq
curl http://192.168.80.10:5000/v2/xxx/centos/tags/list

# 下载镜像
docker pull 192.168.80.10:5000/xxx/centos:v1
1
2
3
4
5
6
7
8
  1. 删除镜像
    • 通过shell脚本(本地删除)
    • 直接删除仓库里的目录(本地删除)
    • 通过仓库的HTTP API删除(远程删除)
# shell脚本
wget ftp://ftp.rhce.cc/cka-tool/delete_docker_registry_image
chmod +x delete_docker_registry_image
export REGISTRY_DATA_DIR=/myreg/docker/registry/v2
./delete_docker_registry_image -i 192.168.80.10:5000/xxx/centos:v1

# 删除目录
docker exec registry rm -rf /var/lib/registry/docker/registry/v2/repositories/XXX

# http api
curl -X DELETE https://192.168.80.10:5000/v2/messer/manifests/sha256:XXX
1
2
3
4
5
6
7
8
9
10
11

# harbor搭建私有仓库

  • 修改配置文件/etc/docker/daemon.json
    • 允许http方式访问**(把端口去掉,只留下IP地址)**
  1. 下载离线包并解压
    • https://github.com/goharbor/harbor/releases
tar -zxvf harbor-offline-installer-v2.0.6.tgz
cd harbor/
1
2
  1. 导入镜像
docker load -i harbor.v2.0.6.tar.gz
1
  1. 运行脚本./prepare执行一些准备工作
./prepare
1
  1. 生成harbor.yaml,编辑文件
    • 修改hostname为本主机名
    • harbor_admin_password是默认密码
      • 默认为:Harbor12345
    • 注释https相关信息
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
1
2
  1. 运行install.sh
./install.sh
1
  1. 访问harbor,输入用户名admin和密码(默认密码Harbor12345)
  2. 项目 -> 新建项目(项目名称-XXX、访问级别-公开)
  3. 系统管理 -> 用户管理 -> 创建用户
  4. 为项目添加用户,项目 -> XXX -> 成员 -> +用户
  5. 修改/etc/docker/daemon.json,更换仓库地址
  6. 重启docker
  7. 登录私有仓库
    • 会生成隐藏文件.docker,记录了登录信息
docker login 192.168.80.10
	# 输入账号密码
1
2
  1. 推送镜像
docker tag XXX 192.168.80.10/XXX:v1
docker push 192.168.80.10/XXX:v1
1
2
  1. 在harbor管理界面查看推送的镜像

# Dockerfile

# COPY

  • 复制指令,从上下文目录中,复制文件或目录 到容器里指定路径
    • --chown=<user>:<group>
      • 可选参数
      • 用户改变复制到容器内,文件的拥有者和属组
    • <源路径>
      • 源文件或者源目录
      • 可以是通配符表达式,规则需要满足Go的filepath.Match包
    • <目标路径>
      • 容器内的指定路径
      • 如果不存在会自动创建
COPY [--chown=<user>:<group>] <源路径1>... <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]

COPY hom* /mydir/
COPY hom?.txt /mydir/
1
2
3
4
5

# ADD

  • 和COPY使用格式类似
    • 同样需求下,官方推荐使用COPY
  • ADD优点
    • 如果<源文件>为tar压缩文件的话
    • 压缩格式为gzip、bzip2、xz的情况下
    • 会自动复制并解压到<目标路径>
  • ADD缺点
    • 在不解压的前提下,无法复制tar压缩文件
    • 会令镜像构建缓存失败,可能会导致镜像构建变得比较缓慢
    • 具体是否使用,可根据是否需要自动解压来决定

# CMD

  • 类似RUN,但是运行的时间点不同
    • CMD在docker run时运行
    • RUN在docker build时运行
  • 作用
    • 为启动的容器,指定默认要运行的程序
    • 程序运行结束,容器也就结束
    • CMD指令可被docker run指定的程序覆盖
  • 注意
    • 如果Dockerfile存在多个CMD指令,仅最后一个生效
  • 推荐使用第二种格式
    • 执行过程比较明确
    • 第一种格式在运行过程中,也会自动转换为第二种格式运行
CMD <shell命令>
CMD ["<可执行文件或命令>", "<param1>", "<param2>", ...]
CMD ["<param1>", "<param2>", ...]						# 为ENTRYPOINT指令指定的程序 提供默认参数
1
2
3

# ENTRYPOINT

  • 类似CMD指令
    • 不会被docker run指定的命令所覆盖
    • 这些指定的命令,会被当作参数传递给ENTRYPOINT指定的程序
    • 如果docker run指定了--entrypoint选项,将覆盖ENTRYPOINT
  • 优点
    • 执行docker run时,可以指定ENTRYPOINT运行所需的参数
  • 注意
    • 如果Dockerfile中存在多个ENTRYPOINT指令,仅最后一个生效
ENTRYPOINT ["<executeable>", "<param1>", "<param2>", ...]
1
  • 可以搭配CMD命令使用
    • 一般是变参才会使用CMD
    • 这里的CMD等于给ENTRYPOINT传参
FROM nginx

ENTRYPOINT ["nginx", "-c"]		# 定参
CMD ["/etc/nginx/nginx.conf"]	# 变参
1
2
3
4
# 不传参运行
	docker run nginx:test
# 容器默认运行以下命令,启动主进程
	nginx -c /etc/nginx/nginx.conf

# 传参运行
	docker run nginx:test -c /etc/nginx/new.conf
# 容器默认运行以下命令,启动主进程
	nginx -c /etc/nginx/new.conf
1
2
3
4
5
6
7
8
9

# ENV

  • 设置环境变量
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
1
2
ENV NODE_VERSION 7.2.0

RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
	&& curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc"
1
2
3
4

# ARG

  • 与ENV作用一致,作用域不一样
    • ARG设置的环境变量,仅对Dockerfile内有效
      • docker build过程
      • 构建好的镜像不存在此环境变量
    • 可以被docker build的--build-arg <key>=<value>覆盖
ARG <参数名>[=<默认值>]
1

# VOLUME

  • 定义匿名数据卷
    • 在启动容器时,如果忘记挂载数据卷,会自动挂载到匿名卷
    • docker run时,可以通过-v参数修改挂载点
  • 作用
    • 避免重要的数据,因容器重启而丢失(致命)
    • 避免容器不断变大
VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>
1
2

# EXPOSE

  • 声明端口
    • 镜像服务的守护端口,以方便配置映射
    • 在docker run -P时,会随机映射EXPOSE指定的端口
EXPOSE <端口1> [<端口2>...]
1

# WORKDIR

  • 指定工作目录
    • WORKDIR指定的工作目录,会在构建镜像的每一层中都存在
    • 指定的目录必须提前创建好
    • 每一个RUN都是新建的一层,只有WORKDIR创建的目录才会一直存在
WORKDIR <工作目录路径>
1

# USER

  • 指定执行后续命令的用户和用户组
    • 只是切换用户(后续执行命令的用户)
    • 用户和用户组必须已存在
USER <用户名>[:<用户组>]
1

# HEALTHCHECK

  • 指定某个程序或指令,监控docker容器服务的运行状态
    • 设置检查容器健康状态的命令
    • 如果基础镜像有健康检查指令,NONE可以屏蔽掉其健康检查指令
    • CMD后面跟随的命令使用,可参考CMD的用法
HEALTHCHECK [选项] CMD <命令>

HEALTHCHECK NONE

HEALTHCHECK [选项] CMD <命令>
1
2
3
4
5

# ONBUILD

  • 延迟构建命令的执行
    • Dockerfile里用ONBUILD指定的命令(FROM ubuntu - test)
      • 在本次构建镜像的过程中不会执行
    • 当有新的Dockerfile使用了上一个镜像(FROM test - test2)
      • 在进行构建时,会执行test中的ONBUILD
ONBUILD <其它指令>
1

# LABEL

  • 给镜像添加一些元数据(metadata)
LABEL <key>=<value> <key>=<value> <key>=<value>...

LABEL org.opencontainers.image.authors="runoob"
1
2
3

# MAINTAINER

  • 维护者的信息

# Docker Compose

# docker-compose up

  • 运行一个Compose应用
    • -d
      • 后台运行
docker-compose up

docker-compose up -d
1
2
3
编辑 (opens new window)
学习建议
Kubernetes(K8s)学习教程 - 前言

← 学习建议 Kubernetes(K8s)学习教程 - 前言→

最近更新
01
API测试笔记
04-30
02
msfvenom
03-29
03
Metasploit
03-29
更多文章>
Theme by Vdoing | Copyright © 2023-2024 Carsaid | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式