docker
服务systemctl start docker
docker
服务systemctl stop docker
docker
服务systemctl restart docker
docker
服务状态systemctl status docker
docker
服务systemctl enable docker
docker search tomcat
搜索结果如下:
docker pull tomcat
我已经拉取过 tomcat
,所以这里用拉取 mysql
来截个图, 不加 tag
的情况下, 默认拉取的就是 latest
(最新版本) 拉取过程是有进度条的
拉取完成就是下面这样
TIP
指定版本号, 格式如下:
docker pull
镜像名:版本号
如果不知道 tag
有哪些, 可以去 Dockerhub 查看
打开网站直接搜索目标镜像, 比如 tomcat
就会搜到如下结果:
点击结果进入详情页就可以查看到 tag
相关信息:
Dockerfile
构建镜像- # docker build -t 镜像名:版本号 . 注意最后边的点 `.` 表示当前目录, 别丢了.
- docker build -t my_image:1.0 .
Docker
build
命令可以使用 Dockerfile
来构建镜像。默认情况下,Dockerfile
文件位于构建上下文的根目录下,因此 docker build
命令会自动读取上下文根路径下名为 Dockerfile
的文件。如果 Dockerfile
文件不在根目录下,可以使用 -f
选项来指定 Dockerfile
文件的路径。例如,以下命令将使用 /path/to/Dockerfile
文件构建镜像:
docker build -f /path/to/Dockerfile -t image_name:tag .
其中,
.
表示当前目录.-f
, --file
Name of the Dockerfile (Default is PATH/Dockerfile)-t
, --tag
Name and optionally a tag in the name:tag formatDockerfile
简单列举几个指令:
FROM
: 指定基础镜像WORKDIR
: 指定工作目录COPY
: 将文件或者目录从构建上下文复制到容器中(推荐)ADD
: 将文件或者目录从构建上下文复制到容器中,并且会将压缩文件解压缩,支持 URL
RUN
: 在容器中执行命令CMD
: 容器启动时执行的命令EXPOSE
: 指定要监听的端口以实现与外部通信举个例子:
Dockerfile
- # nodejs server Dockerfile
-
- # FROM node
- # or
- FROM node:16
-
- WORKDIR /nodeApp
-
- # COPY <宿主机目录或文件路径> <容器内目录或文件路径>
- COPY ./package.json .
- # ADD <宿主机目录或文件路径> <容器内目录或文件路径>
- # ADD ./package.json .
-
- # shell格式:就像在命令行中输入的Shell脚本命令一样。
- RUN npm install
-
- COPY ./src ./server
-
- EXPOSE 8000
-
- CMD ["node", "./server/index.js"]
docker images
该命令将会列出从Dockerhub
拉取的镜像和你自己使用 docker build
构建的镜像列表
查看本地镜像 ID
docker images -q
- docker rmi mysql:5.7
-
- # or
-
- docker rmi 2be84dd575ee
为了准确删除你的目标镜像, 建议删除有多个版本存在的镜像时, 使用镜像名:版本号, 如果二者镜像 ID
不同也可以使用镜像 ID
进行删除, 防止误删
删除tag
为none
的镜像
docker rmi `docker images -f "dangling=true" -q`
全部删除本地镜像
docker rmi `docker images -q`
解释一下, docker images -q
这个命令可以列出全部本地镜像的 ID
, 相当于把全部镜像 ID
传给了docker rmi
就实现全部删除效果了.
TIP
如上图所示: Error response from daemon: conflict: unable to delete eb4a57159180 (cannot be forced) - image is being used by running container 8e27f3c57145
报了个错: 不能删除ID
为eb4a57159180
的镜像(是nginx
镜像), 这个镜像被一个ID
为8e27f3c57145
正在运行的容器使用着.
我使用nginx
镜像启动了一个容器, 此时nginx
镜像是不可以被删除的, 如果确实想要删除nginx
, 需要先停止所有使用这个镜像的容器, 并且将这些容器删除, 才可以删除nginx
镜像
- # docker save -o 给导出的镜像压缩包起个文件名 要导出的镜像名:版本号(推荐) 或者 镜像ID也可以
- docker save -o image.tar target_image:tag
- # docker load -i 指定要导入的镜像压缩包文件名
- docker load -i image.tar
导入成功后就可以使用
docker images
查看一下啦
TIP
如果用镜像 ID
导出的镜像在导入之后是没有名字和tag
的, 这种情况我们可以使用 docker tag
给镜像改名字
docker tag 镜像ID new_image_name:tag
docker run -d --name=my_container -p 8080:8080 tomcat:latest
Docker
创建容器的命令是 docker run
。以下是一些常用的参数:
-d
: 后台运行容器,并返回容器ID
;-p
: 指定端口映射,格式为:主机(宿主)端口:容器端口;-i
: 以交互模式运行容器,通常与 -t
同时使用;-t
: 为容器重新分配一个伪输入终端,通常与 -i
同时使用;--name=my_container
: 为容器指定一个名称;--dns 8.8.8.8
: 指定容器使用的DNS
服务器,默认和宿主一致;--rm
: 退出容器后会自动删除该容器;你可以根据你的需求来选择相应的参数。最后是使用的镜像名和版本号
TIP
使用交互模式运行容器时, 会直接进入容器内部, 退出交互模式后, 该容器自动停止运行
- # 查看正在运行的容器列表
- docker ps
-
- # 查看最近一次创建的容器
- docker ps -l
-
- # 查看正在运行的容器ID列表
- docker ps -q
-
- # 查看全部容器(包括已经停止的容器)
- docker ps -a
-
- # 查看全部容器ID列表
- docker ps -aq
查看正在运行的容器列表
查看正在运行的容器 ID
列表
- # 使用容器名停止
- docker stop my_container
-
- # or
- # 使用容器ID停止
- docker stop container_id
-
- # 使用容器ID停止多个正在运行的容器
- docker stop `docker ps -q`
使用容器 ID
停止多个正在运行的容器
- # 容器名
- docker start my_container
-
- # or
- # 容器ID
- docker start container_id
-
- # 使用容器ID启动多个已停止的容器
- docker start `docker ps -aq`
使用容器名启动
使用多个容器 ID
启动
- # 用容器名删除
- docker rm my_container
-
- # or
- # 用容器ID删除
- docker rm container_id
-
- # 删除多个未运行的容器, 运行中的无法删除
- docker rm `docker ps -aq`
- # 使用容器名
- docker exec -it my_container /bin/bash
-
- # or
- # 使用容器ID
- docker exec -it container_id /bin/bash
进入容器后
- # 容器名
- docker inspect my_container
-
- # or
- # 容器ID
- docker inspect container_id
内容很多一张截图放不下, 自己查查看吧
- # 将容器中 /app/html 目录拷贝到宿主机 /mnt/ 目录中
- docker cp container_id:/app/html /mnt/
- # 将容器中 /app/html/index.html 文件拷贝到宿主机 /mnt/dist/ 目录中
- docker cp container_id:/app/html/index.html /mnt/dist/
- # 将宿主机 /mnt/dist 目录拷贝到容器的 /app 目录中
- docker cp /mnt/dist container_id:/app/
- # 将宿主机 /mnt/dist/index.html 文件拷贝到容器的 /app/html 目录中
- docker cp /mnt/dist/index.html container_id:/app/html/
/mnt/dist
目录拷贝到容器中, 并重命名为html
- # 将宿主机 /mnt/dist 目录拷贝到容器的 /app/ 中重命名为 html
- docker cp /mnt/dist container_id:/app/html
- # 将宿主机 /mnt/dist/index1.html 文件拷贝到容器的 /app/html/ 中重命名为 index.html
- docker cp /mnt/dist/index1.html container_id:/app/html/index.html