Docker 入门及实践
文章目录
前置学习
相关资源
相关命令
-
docker ps
查看但钱运行中的容器 -
docker images
查看镜像列表 -
docker rm container-id
删除指定id的容器 -
docker stop/start container-id
停止/启动指定id的容器 -
docker rimi image-id
删除指定id的镜像 -
docker volume ls
查看volume列表 -
docker network ls
查看网络列表 -
docker pull imageName:tag
拉取配置镜像 -
docker rmi -f imageId...
根据镜像id强制删除 -
docker ps
查看正在使用的镜像 -
docker logs image-id
查看日志 -
docker inspect 容器ID
查看容器中的详细信息 -
docker exec -it 容器id
进入正在运行的容器 (跟后面的docker run 类似)与
docker attach
的区别attach exec 直接进入容器启动命令的终端,不会启动新的进程用exit退出,会导致容器停止 exec是在容器中打开新的终端,并且可以启动新的进程用exit退出,不会导致容器的停止 -
docker cp 容器ID:容器内路径 目的主机路径
将容器中的文件拷贝到宿主机中,如果是Windows系统的话起始目录为/c/....
-
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的镜像名:[Tag]
基于已有的容器使之成为一个新的镜像
docker run 的常用命令及参数
参数 | 说明 |
---|---|
–name=“容器名字” | 为容器指定一个名字,否则自动取名 |
-d | 后台运行容器并返回容器ID,也即启动守护式容器(后台运行) |
-i | 以交模式运行容器,通常与-t 同时使用 |
-t | 为容器重新分配一个伪输入终端,通常与-i 同时使用 |
-P | 随机映射端口,大写P |
-p | 指定端口映射,小写p,端口映射 -p 8080(宿主机上):80(容器内) |
``–privileged=true -v` | /宿主机/绝对路径目录:/容器内目录,可以将数据存放在宿主机的指定目录:权限 (比较重要 -v可指定多个参数,可以实现容器和本地机器的数据关联实现数据的持久化) |
docker ps
参数 | 说明 |
---|---|
-a | -all | 展示所有正在运行的镜像 |
-n | 展示前n个正在运行的镜像 |
-l | --latest | 展示最后创建的镜像 |
-q | --quiet | 只展示容器id |
-s | --size | 展示文件的大小 |
docker 本地镜像发布
容器与主机的数据交互
docker cp 容器ID:容器内路径 目的主机路径
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
将数据卷同步保存到宿主机
命令实操
下载使用ubuntu镜像
依次输入以下命令
docker images // 查看存在的镜像
docker pull ubuntu:18.04
docker run -it ubuntu:18.04 bash //启动交互式ubuntu并使用bash
// 输入 exit 退出
实际案例
1. 快速安装wordpress
首先创建一个 docker-compose.yml
,内容如下:
version: '3.1'
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- wordpress:/var/www/html
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
volumes:
wordpress:
db:
进入到同级目录,启动命令:
docker-compose up -d
我用的是Windows桌面版的,所以可以直接查看可视化界面:
然后我们可以打开浏览器访问:localhost:8080
2. 制作自己的镜像
这里直接参照 简明教程 中的操作
给Web项目构建镜像
示例项目代码:https://github.com/gzyunke/test-docker
先去clone一下项目代码。
编写 Dockerfile
FROM node
# 复制代码,将宿主机中 "." 目录下的文件到容器中 "/app" 目录下
ADD . /app
# 设置容器启动后的默认运行目录
WORKDIR /app
# 运行命令,安装依赖
# RUN 命令可以有多个,但是可以用 && 连接多个命令来减少层级。
# 例如 RUN npm install && cd /app && mkdir logs
RUN npm install --registry=https://registry.npm.taobao.org
# CMD 指令只能一个,是容器启动后执行的命令,算是程序的入口。
# 如果还需要运行其他命令可以用 && 连接,也可以写成一个shell脚本去执行。
# 例如 CMD cd /app && ./start.sh
CMD node app.js
为镜像(安装包)和运行
在代码文件夹下编译 docker build -t test:v1
-t
设置镜像名称和对应的版本号
这里可能会出现下载配置node出错
可以按照下图,打开设置,修改其中配置中的"buildkit": false
运行: docker run -p 9950:8080 --name test-test test:v1
-p
映射容器内端口到宿主机--name
容器名字-d
后台运行
打开浏览器进行访问
扩展知识
UnionFS(联合文件系统)
Union 文件系统(Union)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统时Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。