创建容器完整步骤示例:

dockerhub拉取镜像:

Docker Hub官网

1. 搜索(python)镜像:

docker search python

2.拉取镜像,eg.python

docker pull 镜像名

3. 查看镜像

docker images ls

查看指定名称的镜像:

docker images horovod
# 镜像名包含horovod

查看指定镜像image下的容器container:

docker ps -a | grep horovod
# horovod为镜像名

4. 运行镜像:

docker run -itd python:latest bash

其中,-itd表示后台运行,python:latest为镜像及对应的版本

-itd参数解释:

-i 开启了input(输入)功能;

-t开启了一个连接容器里边的terminal(终端);

-d参数指定容器的运行模式,加了-d参数默认不会进入容器,若要进入容器,需通过docker exec进入。

5.进入容器

docker exec -it 容器id bash

可通过docker ps查看对应镜像启动后获得的容器id(取前四位即可)

进入容器还可使用docker attach 容器id  命令,但该命令在退出容器终端时会导致容器停止。

6.运行交互式容器

两个参数-i -t,实现docker运行的容器具有“对话”能力

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

此时root@xxx:/#表示已进入ubuntu15.10系统的容器,在容器中的操作类似在真实系统中。

退出容器:

exit或者CTRL+D

在宿主机内使用docker logs命令,查看容器内的标准输出:

docker logs 容器id

停止容器:

docker stop 容器id

启动容器:

docker start 容器id

7.导出、导入容器:

导出xxxx容器,快照到本地文件yyyy.tar:

docker export xxxxxx > yyyy.tar

将容器快照文件yyyy.tar再导入为镜像test/ubuntu:v1:

cat docker/yyyy.tar | docker import - test/ubuntu:v1

也可通过指定URL或某个目录导入容器,

docker import http://example.com/exampleimage.tgz example/imagerepo

8.删除容器:
 

docker rm -f 容器id

清除所有处于终止状态的容器:

docker container prune

9. 退出容器三种方式:

方式一:(在容器内)

exit或者快捷键ctrl+D,退出后容器消失,docker ps查不到,若需再次启动,要使用命令:docker start 容器id或容器name

方式二:(在容器外)

docker stop 容器name或容器id

再次启动:docker start 容器name或容器id

方式三(在容器内退出,但后台运行,正在运行的程序不停止)

ctrl+P再按ctrl+Q  或者CTRL+P+Q

再次进入:

docker attach 容器id或容器name

10. 运行Web应用:

在docker容器中运行一个 Python Flask 应用来运行一个web应用

(1)载入镜像

docker pull training/webapp  # 载入镜像

(2)运行

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

-d与-p参数解释:

-d表示让容器在后台运行

-P:将容器内部使用的网络端口随机映射到我们使用的主机上

docker ps 命令查看容器

其中PORTS表示Docker开放5000端口映射到主机端口32769上,

浏览器访问:

这里的端口映射利用-p参数可以自定义:

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

 11. 镜像相关命令:

1.dockerfile创建镜像:

命令docker build

docker build -t runoob/ubuntu:20.04 .

其中:-t:指定要创建的目标镜像名

.  表示Dockerfile文件所在目录, 可指定dockerfile绝对路径

2. 设置镜像标签:

为镜像添加一个新标签

docker tag 镜像id runoob/ubuntu:latest

可通过docker images查看镜像id

dockerfile文件书写举例:

每个指令都会在镜像上创建一个新的层,每个指令的前缀必须大写。

FROM 指定使用哪个镜像源

RUN指令告诉docker在镜像内执行命令,安装了什么,大神指导说,将命令尽量写在一个RUN内。可提高文件运行速度,且对于一些基础的安装指令,可单独写一个dockerfile文件,这样就只需要执行一次。

 2022.3.15更新

运行nvidia docker

1、运行docker:
// 运行docker
systemctl start docker
// 加入开机启动
systemctl enable docker
// 查看状态
systemctl status coker

2、运行nvidia-docker:
systemctl start nvidia-docker
systemctl enable nvidia-docker
systemctl status nvidia-docker

2022/3/30

12. 将容器打包为镜像

在容器中调试完代码后,方便下次使用(因为只有你更改的code只在你所在的容器里面),为防止容器被删掉,数据丢失,将容器打包为镜像

命令:

先退出容器再执行(commit也是另一种创建image的方式,除了dockerfile方式):

docker commit [-m="提交的描述信息"] [-a="创建者"] 容器名称|容器ID 生成的镜像名[:标签名]

根据自己信息更改下:

docker commit -m='first_weather_day_horovod' -a="zqq" f985e011aec1 horovod_weather_day:test1

然后测试一下,运行:

docker run -itd horovod_weather_day:test1 bash

进入容器:

docker exec -it 0d0c bash

可以看到代码已经在里面了。

镜像打包完成,可以保存在本地,tar文件:

docker save -o horovod_weather_day.tar horovod_weather_day:test1

13. 拷贝服务器上指定文件到容器

docker cp 服务器本地文件路径 容器id:容器内文件的目标路径

更加规范请参考:(上文仅是个人学习过程中的记录)

Docker 容器使用 | 菜鸟教程 (runoob.com)

 2022.4.11更新

14.清理冗余镜像:

 

 参考:Docker prune清理系统垃圾 - 云计算 - 亿速云 (yisu.com)

2022.4.12 更新

15.修改镜像名称和tag:

docker tag 原images 新镜像名:新镜像tag

16.将本地文件目录挂载到容器

方便容器内可以访问本地文件或文件夹

docker run -v 本地目录绝对路径:容器内要放置的目录绝对路径 image名称

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐