docker常规使用命令集及原理


配置镜像加速:访问阿里云容器镜像服务,执行它所给代码
在这里插入图片描述

常用命令

帮助启动类命令

启动:systemctl start docker

停止:systemctl stop docker

重启:systemctl restart docker

查看状态:systemctl status docker

开机启动:systemctl enable docker

概要信息:docker info

总体帮助文档:docker --help

命令帮助文档:docker 具体命令 --help

镜像命令

docker images :查看本地主机上镜像
docker images -q :只查看id
docker images -aq: 只查看本地所有的镜像的id(包含历史映像层)

REPOSITORY镜像的仓库源
TAG版本号
IMAGE ID镜像ID
CREATED镜像创建时间
SIZE镜像大小

docker search redis:搜索redis

docker search --limit 5 redis:只显示前5个

docker pull redis:拉取

docker pull redis:6.0.8 拉取版本号为6.0.8,不写默认为最新

docker system df : 查看镜像容器所占用空间

docker rmi id(redis) :删除redis镜像携带id

docker rmi -f id :强力删除

docker rmi -f $ ( d o c k e r i m a g e s − a q ) :支持 (docker images -aq) :支持 (dockerimagesaq):支持引用(禁止使用,这里只是展示


虚玄镜像:仓库名和id都是none,没什么意义,直接删除

偶遇虚玄镜像:用Dockerfile制作镜像失败时出现
可使用 rmi -f 或 docker image prune 删除
在这里插入图片描述

容器命令

docker run hello -word 相当于java实例化了一个对象

docker run --name 为容器指定名称

docker run -it --name=myU1 ubuntu bash

-d:后台启动并返回容器id

-i:交互模式运行容器

-t:为容器重新分配一个伪输入终端,it通常一起使用

docker run -it ubuntu 返回一个可交互输入终端(shell),退出exit

docker ps :展示所有正在运行的容器

docker ps -a:列出当前正在运行的容器+历史上运行过的

docker ps -l:显示最经创建的容器

docker ps -n :显示最近第n个创建的容器 docker ps -n 2

docker ps -q :静默模式,只显示容器编号ID

docker ps -a -q

退出容器

exit 容器会停止关闭

ctrl + p + q: 容器不会停止关闭

启动已经停止运行的容器: docker start 容器ID或者容器名

重启容器: docker restart 容器ID或者容器名

停止容器: docker stop 容器ID或者容器名

强制停止容器: docker kill 容器ID或者容器名

删除已经停止的容器(集装箱) docker rm 容器ID

强制删除未停止容器 docker rm -f 容器ID或名称

复合使用 docker rmi -f $(docker images -qa)

前台启动:docker run -it redis:6.2.6

后台启动:docker run -d redis:6.2.6

一般启动后查看进程:docker ps

查看日志: docker logs 3278899ee900[容器ID]

查看容器内运行进程:docker top 容器id (UID,PID,运行时间)

查看内部细节:docker inspect [容器id]

重新进入正在运行的容器:
  • docker exec -it [容器id] {docker exec -it 3278899ee900 /bin/bash}
  • docker attach [容器id]
  • 工作上常用第一种

两者的区别

  • exec是在容器中打开新的终端,并且可以启动新的进程,用exit推出,不会导致容器停止

  • attach直接进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器停止

docker操作文件(拷贝、导入/出)

docker cp 容器id : 容器内路径 目的主机路径

将容器内部文件复制到容器外:

docker cp container:source_path output_path

将外部文件复制到容器内:

docker cp source container:target_path

导入导出容器:

导出:docker export 容器ID > 文件名.tar

docker export cb2323865a76 > ubuntu.tar 相当于备份了整个容器

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

cat ubuntu.tar | docker import - linxi/ubuntu:3.7

导入容器形成新的镜像,然后运行恢复原样

docker镜像层是只读的,容器层是可读可写

总结

在这里插入图片描述


attach    Attach to a running container                 # 当前 shell 下 attach 连接指定运行镜像
build     Build an image from a Dockerfile              # 通过 Dockerfile 定制镜像
commit    Create a new image from a container changes   # 提交当前容器为新的镜像
cp        Copy files/folders from the containers filesystem to the host path   #从容器中拷贝指定文件或者目录到宿主机中
create    Create a new container                        # 创建一个新的容器,同 run,但不启动容器
diff      Inspect changes on a container's filesystem   # 查看 docker 容器变化
events    Get real time events from the server          # 从 docker 服务获取容器实时事件
exec      Run a command in an existing container        # 在已存在的容器上运行命令
export    Stream the contents of a container as a tar archive   # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
history   Show the history of an image                  # 展示一个镜像形成历史
images    List images                                   # 列出系统当前镜像
import    Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应export]
info      Display system-wide information               # 显示系统相关信息
inspect   Return low-level information on a container   # 查看容器详细信息
kill      Kill a running container                      # kill 指定 docker 容器
load      Load an image from a tar archive              # 从一个 tar 包中加载一个镜像[对应 save]
login     Register or Login to the docker registry server    # 注册或者登陆一个 docker 源服务器
logout    Log out from a Docker registry server          # 从当前 Docker registry 退出
logs      Fetch the logs of a container                 # 输出当前容器日志信息
port      Lookup the public-facing port which is NAT-ed to PRIVATE_PORT    # 查看映射端口对应的容器内部源端口
pause     Pause all processes within a container        # 暂停容器
ps        List containers                               # 列出容器列表
pull      Pull an image or a repository from the docker registry server   # 从docker镜像源服务器拉取指定镜像或者库镜像
push      Push an image or a repository to the docker registry server    # 推送指定镜像或者库镜像至docker源服务器
restart   Restart a running container                   # 重启运行的容器
rm        Remove one or more containers                 # 移除一个或者多个容器
rmi       Remove one or more images       # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
run       Run a command in a new container              # 创建一个新的容器并运行一个命令
save      Save an image to a tar archive                # 保存一个镜像为一个 tar 包[对应 load]
search    Search for an image on the Docker Hub         # 在 docker hub 中搜索镜像
start     Start a stopped containers                    # 启动容器
stop      Stop a running containers                     # 停止容器
tag       Tag an image into a repository                # 给源中镜像打标签
top       Lookup the running processes of a container   # 查看容器中运行的进程信息
unpause   Unpause a paused container                    # 取消暂停容器
version   Show the docker version information           # 查看 docker 版本号
wait      Block until a container stops, then print its exit code   # 截取容器停止时的退出状态值
 

镜像生成

镜像分层,最底层只含有基础功能,上层含有更多功能但是占用储存就更大,类似洋葱

更新包管理工具

apt-get update

安装vim

apt-get -y install vim

现有容器添加以上功能后生成镜像

docker commit -m=“描述信息” -a=“作者” 容器ID 包名/镜像名:版本号
docker commit -m=“add vim ok” -a=“linsy” 87bfc58aae5c linsy/ubuntu:1.1

本地镜像发布到阿里云

一、 创建命名空间(包名)

在这里插入图片描述

二、创建镜像创库

在这里插入图片描述

三、根据操作指南执行命令

在这里插入图片描述

https://cr.console.aliyun.com/cn-hangzhou/instance/repositories

四、将镜像推送到Registry

选择第3点,切记命令不要自己打,粘贴过来改


docker login --username=aliyun4085408287 registry.cn-hangzhou.aliyuncs.com
密码为2***

docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/linsy/ubuntu:[镜像版本号]
docker tag a572362318a2 registry.cn-hangzhou.aliyuncs.com/linsy/ubuntu:1.1

docker push registry.cn-hangzhou.aliyuncs.com/linsy/ubuntu:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/linsy/ubuntu:1.1

五、从Registry中拉取镜像

docker pull registry.cn-hangzhou.aliyuncs.com/linsy/ubuntu:[镜像版本号]
docker pull registry.cn-hangzhou.aliyuncs.com/linsy/ubuntu:1.1

本地镜像发布到私有库

1. 下载镜像 Docker Registry

docker pull registry

2. 提交新生成的镜像:

 docker commit -m="add ifconfig ok" -a="linsy"  containerId linsy/ubuntu:1.2

3. 运行私有库 Registry

docker run -d -p 5000:5000  -v /linsy/myregistry/:/tmp/registry --privileged=true registry

默认情况,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便于宿主机联调

4. curl验证私服库有什么镜像

curl -XGET http://192.168.52.129:5000/v2/_catalog
空的:
在这里插入图片描述

5. 将新镜像:1.2修改符合私服规范的Tag

docker tag 镜像:Tag Host:Port/Repository:Tag
自己host主机IP地址
docker tag linsy/ubuntu:1.2 192.168.52.129:5000/ipubuntu:1.2

6. 取消docker 默认不允许的htpp推送镜像

在 /etc/dokcer/deamo.json中添加宿主机IP地址,别忘了逗号。
在这里插入图片描述

7. push推送到私有库

systemctl reload docker
docker push 192.168.52.129:5000/ipubuntu:1.2

8. curl 验证registry是否成功上传

curl -XGET http://192.168.52.129:5000/v2/_catalog
在这里插入图片描述

9. 从私服库中拉去镜像

docker pull 192.168.52.129:5000/ipubuntu:1.2

容器数据卷

坑:容器卷记得加入:–privileged=true =》开启权限
docker 挂载主机目录出现 cannot open directory .: Premission denied

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

容器数据卷的目的是:将容器内的数据保存在宿主机磁盘中,完成重要数据的持久化备份这里是双向绑定,如果宿主机共享目录下增加了新文件那么容器内也会有
容器实例被删除了,只要数据卷还在,新启一个容器挂载数据卷目录,数据会备份回去。
在这里插入图片描述

特点:

  1. 数据卷可以在容器之间共享或重用数据
  2. 容器数据更改,数据卷实时备份
  3. 数据卷中的更改不包含在镜像中的更新
  4. 数据卷的生命周期一直持续到没有容器使用它为止

cp 和 import / export 都是手动、单向的、一次性的,-v 的挂载自动的、双向的、永久的

数据卷和主机互联互通

公式:docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=U1 ubuntu   

没有这个路径docker 会自建

将docker容器中镜像产生的重要文件实时备份到 Linux 操作系统磁盘中,当然Linux中该备份文件夹产生的内容也会同步到镜像中, 就是两个备份文件夹进行绑定

查看数据卷是否挂载成功

docker inspect 容器ID docker inspect 23e21a3b2c0f,以json形式返回容器各种信息
Mounts 挂载,类型:绑定,source:宿主机路径,Destination:docker路径。
在这里插入图片描述

容器和宿主机质之间数据共享

当docker中镜像停止运行,而Linux备份文件夹中产生新的数据,那么当镜像启动时Linux产生的该数据也会同步到镜像中

rw ro

默认rw可读可写, ro只读(只限制容器镜像)

-v /usr/local/nginx/logs:/var/log/nginx:rw 
-v /usr/local/nginx/logs:/var/log/nginx:ro

继承与共享

类似于java继承,实现了容器数据卷之间的共享(u1,u2,host主机)
-v 全称就是 volumes

docker run  -it --privileged=true  -volumes-form  父类(如u1)  --name u2 ubuntu

u2继承的是u1挂载路径的规则,当u1停止运行(f父类死亡),u2照样能找到主机

对已经启动的容器添加目录映射

点我查看原文章

挂在目录文件丢失

docker常规安装

tomcat

docker pull tomcat 安装最新版本
安装tomcat预想查看“猫”,就需要将tomcat镜像里的webapps文件删除,然后将webapps.dist改成webapps。

docker run …tomcat 后面直接写名字会寻找最新版运行,如果没有就会下载,所有最好写tomcat8的镜像ID

mysql

日常使用
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker exec -it mysql /bin/bash
生产上

加入三个数据卷(日志、数据、配置)

日常工作中一定要加数据卷,即使容器被删除了,再次启动数据还能备份回容器中。

docker run -d -p 3306:3306 --privileged=true \
-v /root/mysql/log:/var/log/mysql \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456  \
--name mysql \
mysql:5.7

解决中文乱码(utf-8):进入conf目录,添加文件 my.cnf,重启

[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8

在这里插入图片描述

redis

复制一份redis.conf文件,或从网上下载,修改以下配置:

  1. 注释掉 # bind 127.0.0.1 (允许redis外地连接 )
  2. daemonize no (将daemonize no注释起来或者设置 daemonize yes,因为该配置和docker run中-d参数冲突,会导致容器一直启动失败)
  3. 开启redis数据持久化 appendonly yes 可选
docker run  -p 6379:6379 --name redis --privileged=true \
-v /root/redis/redis.conf:/etc/redis/redis.conf \
-v /root/redis/data:/data \
-d redis redis-server /etc/redis/redis.conf

启动容器失败:

docker logs 容器id 查看报错

  1. 通过查看容器日志,确定是什么问题,docker logs -f -t --tail 行数 容器名

docker logs -f -t --tail 100

  1. 将容器中导致错误的文件拷贝到宿主机上

docker cp containerID:container_path host_path
说明
containerID:容器ID、
container_path:容器内文件路径(需拷贝的源文件)
host_path:宿主机路径(拷贝文件的目标)

  1. 修改拷贝出来的配置文件, 再将配置文件拷贝回去容器

docker cp host_path containerID:container_path

  1. 再次启动容器

docker start containerID

查看未启动容器文件结构

将镜像打包,然后移出查看

docker save nginx > nginx.tar

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值