携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情
Docker基本概念
是一个虚拟机
- 镜像:创建虚拟机前需要下载的系统镜像文件,如iso文件、img文件等一些镜像文件
- 容器: 表示正在运行的一个虚拟机
- tar文件:类似于vm使用时的vmdk文件,可以将一个镜像直接保存成一个tar文件,别人通过load指令便可以重新加载成一个镜像
- dockerfile:一个很短的配置文件,通过写“如何构建”的步骤,来指定一个镜像时如何构建的,通过docker build可以将其构建成一个镜像
- 仓库:远程仓库,保存了很多镜像,包括一些公有的第三方已经做好的镜像,如ubuntu、nginx、mysql、tomcat等镜像,可通过docker pull下载镜像到本地,也可以通过push将自己的镜像上传到仓库
docker在线练习:labs.play-with-docker.com
基础命令
- 从远程仓库下载镜像
docker pull nginx
docker pull nginx:latest
以上两种的效果一样,下面的命令即下载最新的镜像文件
- 查看本地的镜像
docker images
- 删除镜像
docker rmi [镜像名称]
注:删除镜像之前需将依赖该镜像的容器都关闭
- 运行镜像,之后是一个容器
docker run nginx
以上运行方式会阻塞命令行的操作,可以指定一些参数
docker run -d -p 80:80 nginx
-d:后台运行docker
-p:指定内外端口映射
--name:指定容器运行起来之后的名称
-v:映射文件,文件挂载,将本地的文件挂载到某个容器上的文件
-i:交互式操作
-t:终端
base_image:torch:镜像名称及标签
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell
docker run -itd --gpus all --network host -v /root/jlq/vault-double/:/home/code/ base_image:torch /bin/bash
nginx:[版本号]
注:ff4086......表示所运行的容器的id
- 查看正在运行的容器
docker ps
- 修改容器的一些配置:进入容器
docker exec -it [容器id] bash
修改nginx的文件:echo hello > index.html
- 强制删除容器
docker rm -f [容器id]
- 将容器保存为新的镜像
docker commit [容器id] [镜像名称]
- 重新启动容器
docker restart affectionate_aryabhata
- dockerfile操作
新建dockerfile文件
vim dockerfile
FROM nginx //通过from制定docker构建的基础镜像,表示该是基于nginx镜像
ADD ./ /usr/share/nginx/html/ //将当前目录的所有文件拷贝到该文件下
新建index.html文件
vim index.html
在文件内随便写一些内容
构建镜像
docker build -t [镜像名称] .
// 其中 . 表示在当前目录下
- 将镜像保存为一个文件
docker save [镜像名称] >[文件名称]
- 将文件保存为一个镜像
docker load < [文件名称]
/root/zxe/analysis/data/test.mp4
/root/zxe/double
docker run -itd --gpus all --network host -v /root/zxe/double/:/home/code/ base_image:torch /bin/bash
遇到的问题
1.COPY requires at least two arguments, but only one was provided.
原因:COPY写错,源路径和目标路径中间用空格隔开
注:若源路径是个路径,最后用 / 来结束,表示该路径下的所有文件;若源路径是个文件,则直接写到文件的名字即可
2.dockerignore: stat root/jlq/vault-double/: file does not exist
原因:dockerfile上下文问题,发出docker build命令后,当前的工作目录称为构建上下文。假设dockerfile位于此处,可以使用文件标志 -f 指定其他位置。无论位于何处,当前目录文件和目录的所有递归内容都将作为构建上下文发送到docker守护程序