docker容器管理教程
2022年12月31日大约 6 分钟约 1693 字
参数解释
- docker容器可以理解为在沙盒中运行的进程。
- 这个沙盒包含了该进程运行所必须的资源,包括文件系统、系统类库、shell 环境等等
- 但这个沙盒默认是不会运行任何程序的。你需要在沙盒中运行一个进程来启动某一个容器
- 这个进程是该容器的唯一进程,所以当该进程结束的时候,容器也会完全的停止
- Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 会从镜像仓库 Docker Hub 下载公共镜像
-p
分配宿主机的端口映射到虚拟机(-p ip:hostPort:containerPort/udp
)
--name
为容器指定一个名称,而不是使用自动生成的
-t
为容器重新分配一个伪输入终端,通常与-i
同时使用
-i
以交互模式运行容器,通常与 -t
同时使用
-v
目录共享挂载,把一个宿主机的目录挂载到镜像里(宿主机目录绝对路径:镜像内挂载的路径 , -v /Users/demon:/root
)
-d
让容器在后台运行 (重要)
-P
是容器内部端口随机映射到主机的高端口(主机端口:容器端口)
资源限制:
参数 | 解释 | 例子 |
---|---|---|
-m | 内存上限 | -m 400M |
--cpu-shares | cpu相对(其他容器)权重 | --cpu-shares 10 |
重启参数
--restart=no
:no
为默认参数,表示不自动重启容器。--restart=on-failure
:容器在发生error而非正常停止退出时自动重启。开机会自动启动。--restart=on-failure:3
:同上,只是最多重启3次。--restart=unless-stopped
:类似always,不同之处是开机会检查上一次状态,如果上一次是停止状态则不会启动该容器,否则启动该容器--restart=always
:总是重启。开机会自动启动。
在现有容器更新参数:docker update --restart=unless-stopped
容器ID
创建示例
# 交互式创建一个shell
docker run -it python:3.11 /bin/bash
docker run -it –-name=kali -p 8081:80 -p 8080:8080 -p 4444:4444 -p 5555:5555 -p 2222:22 kalilinux/kali-linux-docker /bin/bash
# 打开一个正在运行的容器的shell
# -it:以交互的方式运行/bin/bash
docker container exec -it 3kdiso3nsid32 bash
docker exec -it hello-nginx /bin/bash
# 运行portia
docker run -v I:\dockerData\portia:/app/data/projects:rw -p 9001:9001 scrapinghub/portia
# 运行postgresql(用户名:postgres)
docker run --name postgres -e POSTGRES_PASSWORD=test_password -p 5432:5432 -d --restart=unless-stopped postgres
# 运行redis
docker run --name redis -p 6379:6379 -d --restart=unless-stopped redis
# 创建mysql容器
docker run -d --name mysql -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=wordpress mysql
# 创建wordpress容器
docker run -d --link mysql -p 8080:80 -e WORDPRESS_DB_HOST=mysql:3306 wordpress
docker命令
# 查看容器
docker ps # 查看正在运行的容器
docker ps -a
docker ps -l
docker container ls
# 查看容器的详细信息
# 查看Docker的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息
docker inspect kali
# 查看容器的标准输出
# `-f` 让 **docker logs** 像使用 **tail -f** 一样来输出容器内部的标准输出。
docker logs 5f31bf2a0213
# 查看容器网络端口
docker port 5f31bf2a0213
docker port 5f31bf2a0213 22
# 查看容器内部运行的进程
docker top kali
# 查看资源占用
docker stats
# 启动一个已经存在的容器
docker start 容器ID or 容器名称
docker start 5f31bf2a0213
# 停止一个正在运行的容器
# 在容器内使用`exit`即停止容器, 或者在容器外使用`stop`命令即停止容器
docker stop kali
# 连接一个容器
docker attach 容器ID or 容器名称
docker attach kali
# 删除容器
# 使用`rm`命令之前必须停止该运行的容器,或者强制删除用参数'-f'
docker rm 容器id or 容器名称
docker rm kali
docker rm $(docker container ls -aq) # 删除所有容器
docker rm $(docker container ls -f "status=exited" -q) # 删除已经停止的容器
docker container prune # 批量删除停止的容器
# 文件拷贝
# cp命令可以直接覆盖重名文件
docker cp 文件 容器ID:容器内目录路径
docker cp index.html 17add7bbc58c://usr/share/nginx/html
保存对容器的修改
- 当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来
- 这样下次可以从保存后的最新状态运行该容器
- docker中保存状态的过程称之为committing,它保存的新旧状态之间的区别,从而产生一个新的版本
-m
提交的描述信息-a
指定镜像作者
docker ps -l
# 将容器保存为一个新的镜像,镜像名为xionglilong/test
# docker container commit (简写)
# docker commit 容器ID或容器name 新的镜像名
docker commit 5f31bf2a0213 xionglilong/test
设置镜像标签
docker tag 5f31bf2a0213 xionglilong/test:latest
docker tag docker/whalesay xionglilong/whalesay # 将docker/whalesay复制成xionglilong/whalesay
将容器做备份快照迁移
- Docker是基于镜像的。镜像类似于已经包含了文件、配置和安装好的程序的虚拟机镜像。
- 你可以像启动虚拟机一样启动多个镜像实例
- 运行中的镜像称为容器
- 你可以修改容器(比如删除一个文件),但这些修改不会影响到镜像
- 你使用docker commit 命令可以把一个正在运行的容器变成一个新的镜像
将指定镜像保存成tar归档文件
# 导出镜像
docker save -o kali.tar kalilinux/kali-linux-docker
持久化容器(不是镜像)
# 导出容器
docker export 5f31bf2a0213 > kali.tar
导入镜像
docker load -i kali.tar
导入容器
# 导入容器到本地镜像库并命名为kali
docker import kali.tar kali
发布镜像
- 我们可以把我们自己编译的镜像发布到官方的索引网站
- 一方面可以自己重用,另一方面也可以分享给其他人使用
- 你只能将镜像发布到自己的空间下面。这个模拟器登录的是learn帐号
docker login # 登陆xionglilong账号
# docker image push (简写)
docker push xionglilong/kali-linux-docker
其他命令
build # 通过 Dockerfile 定制镜像
create # 创建一个新的容器,同 run,但不启动容器
cp # 从容器中拷贝指定文件或者目录到宿主机中
diff # 查看 docker 容器变化
events # 从 docker 服务获取容器实时事件
exec # 在已存在的容器上运行命令
history # 展示一个镜像形成历史
info # 显示系统相关信息
kill # 杀死一个正在运行的容器
login # 注册或者登陆一个 docker 源服务器
logout # 从当前 Docker registry 退出
pause # 暂停容器
unpause # 取消暂停容器
restart # 重启运行的容器
wait # 截取容器停止时的退出状态值