Docker基本使用

138 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情

Docker基本概念

是一个虚拟机

1.png

  • 镜像:创建虚拟机前需要下载的系统镜像文件,如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守护程序