×

签到

分享到微信

打开微信,使用扫一扫进入页面后,点击右上角菜单,

点击“发送给朋友”或“分享到朋友圈”完成分享

【Docker-03】Docker基本命令 tangnian2023-08-02 17:02:22 回复 查看 经验交流
【Docker-03】Docker基本命令
分享到:

链接:https://zhuanlan.zhihu.com/p/551408043


1、镜像和容器的关系

镜像可以看成C++中的类,而容器可以看做是类的实例化对象。一个类可以有多个对象,同理,一个镜像可以有多个容器。容器是由镜像实例化而来。简单来说,镜像是文件,容器是进程。

2、镜像相关

1 拉取镜像

docker pull [option] NAME [:TAG]

从仓库拉取镜像到本地,[option]为可选择的参数,[:TAG]为可选择项的版本,默认是latest,执行,docker pull hello-world

解答可能的几个疑惑:

  1. hello-world 为何是中划线,这是因为官网这么取名,这些镜像及其属性等,都是官网上给出的。

  2. 只给了名称,没有给地址,怎么来的,这是因为默认从官网仓库(hub.docker.com)获取

2 查询镜像

docker images [option] [NAME]

查询本地是否有哪些镜像,[option] [NAME] 这两个都是可选择项目。



简单说明上述参数:

REPOSITORY是名称
TAG是版本
IMAGE ID 是镜像的编号(总共64位,这里只显示16位)
CREATED是最近创建或修改的时间
SIZE是镜像的大小

3 使用docker commit 创建镜像

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

4 保存tar文件

本文是从同事那下载的,也可以直接和之前操作类似,从网上拉取。

镜像和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

5 修改镜像tag

修改images的名称:

docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)

6 删除镜像

查询镜像:docker images

删除:docker rmi 镜像名称/id

注意:

1)删除对应镜像前要保证对应的容器删除。

2)提示:image is referenced in multiple repositories。注意检查是不是打了tag导致的,建议按照“名称:版本”的形式删除。

7 案例和注意

安装压缩包,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

3、容器操作

1 help

其实docker后的每个命令都可以运行--help,作为下一步命令提示和帮助。可以多尝试使用。

2 打开容器

docker run [option] IMAGENAME [:TAG] [COMMAND][ARG..]

运行镜像,[option] 也是参数,[:TAG]版本,[COMMAND][ARG..]执行的命令及其参数。如运行docker run hello-world

这个命令很简单,但能说明docker运行的流程:

  1. docker client 连接了docker daemon;

  2. Docker daemon 从docker Hub(docker仓库)拉去hello-world 的镜像

  3. Docker daemon 从镜像创建了一个新的容器,这个容器运行了这个可执行的文件,产生了你当前看到的输出

  4. 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

3 启动容器

docker start:作用是重新启动已存在的镜像。也就是说,如果使用这个命令,我们必须事先知道这个容器的ID,或者这个容器的名字,我们可以使用docker ps找到这个容器的信息。

注意:与docker run的区别

  • docker run 只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可。

  • docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。

4 容器启停

docker [stop]|[start] name

5 查询容器

查看容器

而要显示出所有容器,包括没有启动的,可以使用命令: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 : 容器名称

6 宿主机看docker使用情况

docker stats [OPTIONS] [CONTAINER...]

docker stats命令返回一个用于运行容器的实时数据流。要将数据限制到一个或多个特定的容器,可以指定一个由空格分隔的容器名称或ID的列表。您也可以指定一个已停止的容器,但是停止的容器不返回任何数据

扩展参数

OPTIONS默认说明
–all, -afalse显示所有容器(默认显示刚刚运行)
–format
使用Go模板打印图像
–no-streamfalse禁用流统计信息,仅拉取第一个结果

7 看容器信息--IP和映射等

如何查看docker的镜像映射情况,以57ae的容器为例:

docker inspect 57ae | grep Mounts -A 200

同样的方法也可以看镜像情况:

docker inspect 镜像ID

8 查看容器进程在宿主机的 PID

> docker [container] top <container>

9 重命名

docker rename old_name new_name

给这个容器命名。再次启动或停止容器时,就可以直接使用这个名字

10 进入Docker容器

方法一:docker attach 容器ID

方法二:docker exec -it 容器ID /bin/bash

退出:exit

注意:方法一的形式直接进入运行的后台吗,使用退出时,也会关闭容器。

11 数据拷贝

sudo docker cp 本地文件/ 容器号:/容器内文件

12 容器内启动jupyter

pip install jupyterlab
jupyter lab --allow-root --ip=0.0.0.0 --port=8888
##另外可以设置jupyter的密码:比如这里设置为123456789
Jupyter-lab password
123456789

13 容器推送到云端

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

14 删除容器

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();

版权所有 © 2024 寒武纪 Cambricon.com 备案/许可证号:京ICP备17003415号-1