从容器中复制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 run -d -p 2222:22 --name test soar/centos:7.1 以镜像
docker删除镜像/容器
docker要删除镜像,先要删除依赖它的容器
- 删除容器
docker ps #查看正在运行的容器
docker ps -a #查看所有容器
docker rm container_id #删除容器
- 删除镜像
docker images //查看镜像
docker rmi image_id
- 查看镜像 docker images
- 删除nginx镜像, docker rmi repid 显示
'image is referenced in multiple repositories'
- 再看控制台中IMAGE ID为sdfsdfdsfsdf的nginx指向两个repository,所以删除失败了
- 这时要指定repository和tag删除
docker rmi tomcat:tGv2.0.1
- 再次查看镜像,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 命令的源如果是文件夹,复制的是文件夹的内容而不是其本身 使用 * 匹配所有文件,如果遇到文件夹也会保持上述逻辑,即仅复制内容