从容器中复制file出来

从 test1100aaaaaddeedd 容器中复制 nginx.conf 出来

docker run --name test1100aaaaaddeedd -d nginx  
docker cp test1100aaaaaddeedd:/etc/nginx/nginx.conf /data/
  • docker启动容器失败怎么查看日志
    • docker logs 容器id
  • 查看所有容器,包括启动成功与失败的
    • sudo docker ps -a
  • docker ps 查看当前正在运行的容器
  • docker ps -a 查看所有容器的状态
  • docker start/stop id/name 启动/停止某个容器
  • docker attach id 进入某个容器(使用exit退出后容器也跟着停止运行)
  • docker exec -ti id /bin/bash 启动一个伪终端以交互式的方式进入某个容器(使用exit退出后容器不停止运行)
  • docker images 查看本地镜像
  • docker rm id/name 删除某个容器
  • docker rmi id/name 删除某个镜像
docker run :创建并运行一个容器,-d 是让容器在后台运行
--name mysql :给容器起个名字,必须唯一
-p 3306:3306 :设置端口映射
-e KEY=VALUE :是设置环境变量
mysql :指定运行的镜像的名字

# 镜像名称结构:
# 镜像名:版本号
 Repository:TAG

  • docker run --name test -ti ubuntu /bin/bash
    • 复制ubuntu容器并且重命名为test且运行,然后以伪终端交互式方式进入容器,运行bash
  • docker build -t soar/centos:7.1 . 通过当前目录下的Dockerfile创建一个名为soar/centos:7.1的镜像
    • docker run -d -p 2222:22 --name test soar/centos:7.1 以镜像soar/centos:7.1创建名为test的容器,
    • 并以后台模式运行,并做端口映射到宿主机2222端口,P参数重启容器宿主机端口会发生改变

docker删除镜像/容器

docker要删除镜像,先要删除依赖它的容器

  1. 删除容器
docker ps #查看正在运行的容器

docker ps -a #查看所有容器

docker rm container_id #删除容器
  1. 删除镜像
docker images //查看镜像

docker rmi image_id
  1. 查看镜像 docker images
  2. 删除nginx镜像, docker rmi repid 显示'image is referenced in multiple repositories'
  3. 再看控制台中IMAGE ID为sdfsdfdsfsdf的nginx指向两个repository,所以删除失败了
  4. 这时要指定repository和tag删除
    1. docker rmi tomcat:tGv2.0.1
  5. 再次查看镜像,repository为nginx的镜像已被删除

虚悬镜像

  • 镜像既没有仓库名,也没有 标签,均为<none>
  • <none> <none> 00285df0df87 5 days ago 342 MB

  • 这个镜像原本是有镜像名和标签的,原来为 mongo:3.2 ,随着官方镜像维护,发 布了新版本后,重新 docker pull mongo:3.2 时, mongo:3.2 这个镜像名被 转移到了新下载的镜像身上,而旧的镜像上的这个名称则被取消,从而成为了none 。

  • 除了 docker pull 可能导致这种情况, docker build 也同样可 以导致这种现象。由于新旧镜像同名,

  • 旧镜像名称被取消,从而出现仓库名、标签 均为 的镜像。

  • 这类无标签镜像也被称为 虚悬镜像(dangling image) ,可 以用下面的命令专门显示这类镜像: docker images -f dangling=true 一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命 令删除。 docker rmi $(docker images -q -f dangling=true)

  • kubernetes
    • pod
    • ApiServer
    • ClusterIp
    • NodePodIp
    • loadBlance

常用命令

  • 镜像打包: docker build -t 镜像名称 .

  • 查看生成镜像:docker images

  • 启动镜像:docker run -d -p docker宿主机端口:容器端口 镜像名称

  • 查看启动容器:docker ps -a

  • 镜像打包:docker save -o 打包名称.tar 镜像名称:镜像tag

  • 导入离线镜像包:docker load -i 打包名称.tar

  • 删除镜像:docker rmi 镜像名称/镜像id

  • 进入镜像:docker exec -it 容器id /bin/bash

  • 镜像变更历史:docker history 镜像名称

  • 查看容器信息: docker inspect 容器id

数据卷(volume)

  • 是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。 在执行docker run命令时,使用 -v 数据卷:容器内目录 可以完成数据卷挂载 当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷 什么是数据卷? 数据卷是一个虚拟目录,它将宿主机目录映射到容器内目录,方便我们操作容器内文件,或者方便迁移容器产生的数据 如何挂载数据卷? 在创建容器时,利用 -v 数据卷名:容器内目录完成挂载 容器创建时,如果发现挂载的数据卷不存在时,会自动创建 数据卷的常见命令有哪些? docker volume ls: 查看数据卷 docker volume rm: 删除数据卷 docker volume inspect: 查看数据卷详情 docker volume prune: 删除未使用的数据卷

在执行docker run命令时,使用 -v 本地目录 : 容器内目录 可以完成本地目录挂载

本地目录必须以“/”或 "./" 开头,如果直接以名称开头,会被识别为数据卷而非本地目录 -v mysql : /var/lib/mysql 会被识别为一个数据卷叫mysql -v ./mysql : /var/lib/mysql 会被识别为当前目录下的mysql目录

  • docker run: 创建并运行一个新的容器。
  • -d: 在后台模式下运行容器。
  • --name new_mynginx: 将容器命名为 "new_mynginx"。
  • -p 3345:80: 将主机的端口 3345 映射到容器的端口 80。这样,当你访问主机的 3345 端口时,请求将被转发到容器的 80 端口。
  • -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf: 将主机上的 /data/nginx/conf/nginx.conf 文件挂载到容器的 /etc/nginx/nginx.conf 文件。这样,容器中的 NGINX 配置文件将使用主机上的文件。
  • -v /data/nginx/log:/var/log/nginx: 将主机上的 /data/nginx/log 目录挂载到容器的 /var/log/nginx 目录。这样,容器中的 NGINX 日志文件将写入到主机上的目录。
  • -v /data/nginx/html:/usr/share/nginx/html: 将主机上的 /data/nginx/html 目录挂载到容器的 /usr/share/nginx/html 目录。这样,容器中的 NGINX 网页文件将使用主机上的文件。

whereis nginx

显示 Nginx 在容器内的位置。

/usr/sbin/nginx: 这是 Nginx 可执行文件的路径。 /usr/lib/nginx: 这是 Nginx 的库文件路径。 /etc/nginx: 这是 Nginx 的配置文件目录。 /usr/share/nginx: 这是 Nginx 的共享文件目录。

Dockerfile

  • dockerfile 删除镜像里面文件
 
FROM:指定基础镜像。
RUN:在镜像中执行命令。
COPY:将本地文件复制到镜像中。
WORKDIR:设置工作目录。
CMD:定义启动容器后要执行的命令。
删除文件的指令
在Dockerfile中,我们可以使用RUN指令来执行删除文件的命令。常见的删除文件的命令有rm、rmdir和unlink,具体使用哪个命令取决于你要删除的是文件还是目录。下面是一些常见的删除文件的命令示例:

删除文件:RUN rm /path/to/file
删除目录(必须是空目录):RUN rmdir /path/to/directory
删除目录及其内容:RUN rm -rf /path/to/directory 
  • dockerfile 时使用 COPY 拷贝文件夹

ADD 命令和 COPY 命令在复制文件时行为一致 COPY/ADD 命令的源如果是文件夹,复制的是文件夹的内容而不是其本身 使用 * 匹配所有文件,如果遇到文件夹也会保持上述逻辑,即仅复制内容