打开微信,使用扫一扫进入页面后,点击右上角菜单,
点击“发送给朋友”或“分享到朋友圈”完成分享
链接:https://zhuanlan.zhihu.com/p/551408043
镜像可以看成C++中的类,而容器可以看做是类的实例化对象。一个类可以有多个对象,同理,一个镜像可以有多个容器。容器是由镜像实例化而来。简单来说,镜像是文件,容器是进程。
docker pull [option] NAME [:TAG]
从仓库拉取镜像到本地,[option]为可选择的参数,[:TAG]为可选择项的版本,默认是latest,执行,docker pull hello-world
解答可能的几个疑惑:
hello-world 为何是中划线,这是因为官网这么取名,这些镜像及其属性等,都是官网上给出的。
只给了名称,没有给地址,怎么来的,这是因为默认从官网仓库(http://hub.docker.com)获取
docker images [option] [NAME]
查询本地是否有哪些镜像,[option] [NAME] 这两个都是可选择项目。
简单说明上述参数:
REPOSITORY是名称 TAG是版本 IMAGE ID 是镜像的编号(总共64位,这里只显示16位) CREATED是最近创建或修改的时间 SIZE是镜像的大小
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker commit -a="mrhelloworld" -m="jdk11 and tomcat9" centos7 mycentos:7
-a:提交的镜像作者;
-c:使用 Dockerfile 指令来创建镜像;
-m:提交时的说明文字;
-p:在 commit 时,将容器暂停。
centos7 容器的名称
mycentos:7 新的镜像名称和版本
实例:sudo docker commit -a="wb66" e9213a0a9aa8 anaconda_ft_wb66:v1
本文是从同事那下载的,也可以直接和之前操作类似,从网上拉取。
镜像和tar文件的转换:两种方式docker import 和export ;docker save 和 load,这里介绍save和load
2.1 保存镜像为tar文件
docker save [OPTIONS] IMAGE [IMAGE...]
例如:$ docker save -o fedora-latest.tar fedora:latest
2.2 从tar文件加载为镜像
例如:$ docker load --input fedora.tar
修改images的名称:
docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)
查询镜像:docker images
删除:docker rmi 镜像名称/id
注意:
1)删除对应镜像前要保证对应的容器删除。
2)提示:image is referenced in multiple repositories。注意检查是不是打了tag导致的,建议按照“名称:版本”的形式删除。
安装压缩包,vim功能,安装ssh、日志函数loguru,环境参数,时间同步
ubuntu为例:
apt-get install zip apt-get install vim apt-get update apt-get install -y openssh-server pip install loguru pip install environs
时间同步参考:
方法一(忘记映射后的补救): docker run -ti --name 容器名称 -v /etc/localtime:/etc/localtime:ro 镜像:版本 /bin/bash
方法二(做映射):docker cp /etc/localtime 容器ID:/etc/ 这个修改其实是一个软连接,可见下修改。
方法三:报错时,将进行如下修改:
docker cp /usr/share/zoneinfo/Asia/Shanghai 容器ID:/etc/localtime
其实docker后的每个命令都可以运行--help,作为下一步命令提示和帮助。可以多尝试使用。
docker run [option] IMAGENAME [:TAG] [COMMAND][ARG..]
运行镜像,[option] 也是参数,[:TAG]版本,[COMMAND][ARG..]执行的命令及其参数。如运行docker run hello-world
这个命令很简单,但能说明docker运行的流程:
docker client 连接了docker daemon;
Docker daemon 从docker Hub(docker仓库)拉去hello-world 的镜像
Docker daemon 从镜像创建了一个新的容器,这个容器运行了这个可执行的文件,产生了你当前看到的输出
Docker daemon把输出变成输出流给到docker client, docker client呈现给终端。
docker run --help
可以发现有很多可以选择的参数可以运行。
实例1
sudo nvidia-docker run -it --name 容器名称 -p 1234:8888 -v 宿主机: 镜像文件夹 镜像:版本 bash
注意:启动cuda,需要添加nvidia
实例2
控制docker日志的大小
docker run ...... --log-opt max-size=10m --log-opt max-file=1
docker start:作用是重新启动已存在的镜像。也就是说,如果使用这个命令,我们必须事先知道这个容器的ID,或者这个容器的名字,我们可以使用docker ps找到这个容器的信息。
注意:与docker run的区别
docker run 只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可。
docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。
docker [stop]|[start] name
查看容器
而要显示出所有容器,包括没有启动的,可以使用命令:docker ps -a
寻找自己的容器:sudo docker ps -a | grep 需要搜索的关键字
查看日志
sudo docker logs --details 容器ID
例如:docker logs -f -t --since="2017-05-31" --tail=10 edu_web_1
--since : 此参数指定了输出日志开始日期,即只输出指定日期之后的日志。
-f : 查看实时日志
-t : 查看日志产生的日期
-tail=10 : 查看最后的10条日志。
edu_web_1 : 容器名称
docker stats [OPTIONS] [CONTAINER...]
docker stats命令返回一个用于运行容器的实时数据流。要将数据限制到一个或多个特定的容器,可以指定一个由空格分隔的容器名称或ID的列表。您也可以指定一个已停止的容器,但是停止的容器不返回任何数据
扩展参数
OPTIONS | 默认 | 说明 |
–all, -a | false | 显示所有容器(默认显示刚刚运行) |
–format | 使用Go模板打印图像 | |
–no-stream | false | 禁用流统计信息,仅拉取第一个结果 |
如何查看docker的镜像映射情况,以57ae的容器为例:
docker inspect 57ae | grep Mounts -A 200
同样的方法也可以看镜像情况:
docker inspect 镜像ID
> docker [container] top <container>
docker rename old_name new_name
给这个容器命名。再次启动或停止容器时,就可以直接使用这个名字
方法一:docker attach 容器ID
方法二:docker exec -it 容器ID /bin/bash
退出:exit
注意:方法一的形式直接进入运行的后台吗,使用退出时,也会关闭容器。
sudo docker cp 本地文件/ 容器号:/容器内文件
pip install jupyterlab jupyter lab --allow-root --ip=0.0.0.0 --port=8888 ##另外可以设置jupyter的密码:比如这里设置为123456789 Jupyter-lab password 123456789
sudo docker commit -a="runningMdmv2" 46509d11208b produce_mdmkv_running:v2 sudo docker tag b9d2fe751624 harbor2.yundasys.com:8443/routing-team/produce_mdmkv_running:v2 sudo docker push harbor2.ysys.com:8443/routing-team/produce_mdmkv_running:v2
docker rm 容器名称/id
注意:容器需要暂停才能删除,使用docker stop 容器名称/id
1. 镜像官网:https://docs.docker.com/engine/reference/commandline/save/
2. Docker 镜像构建之 docker commit https://docs.docker.com/engine/reference/commandline/save/
3. 之前些的docker bulid(Dockerfile)方式: SyntaxHighlighter.all();
热门帖子
精华帖子