Docker笔记
Hello World!
下载一个镜像并运行
docker image pull library/hello-world
docker image ls
docker run hello-world
基本操作
镜像相关
docker image help # 帮助
docker image ls # 查看
docker image rm # 删除
容器相关
容器有可能在运行完毕后自动结束,也可能是常驻服务,后者可用kill命令杀掉
docker container help # 帮助
docker container ls # 查看
docker container ls --all # 查看包括已终止的所有容器
docker container run # 新建容器
docker container start # 启动
docker container stop # 停止,比 kill 更柔和
docker container exec -it # 进入一个正在运行的容器
docker container cp [containID]:[/path/to/file] . # 复制文件
docker container logs [containerID] # 查看容器日志输出
docker container rm # 杀掉容器
docker container rm # 删除容器文件
Dockfile
Dockfile用于配置生成image,即如果要自定义image需要使用它
示例:打包一个 npm 前端网站
1、创建 .dockerignore 文件,即打包时需要排除的文件
.git
node_modules
npm-debug.log
2、编写Dockerfile
FROM node:8.4 # 在该官方包的基础上进行
COPY . /app # 将目录 . 的内容复制进镜像的 /app 目录中
WORKDIR /app # 以 /app 目录作为工作所在目录
RUN npm install --registry=https://registry.npm.taobao.org # 运行 npm 命令,该阶段产生的文件将被打包进 image 文件中
EXPOSE 3000 # 暴露 3000 端口
CMD npm run dev # 启动命令。RUN 编译镜像文件时运行,结果会打包进去。而 CMD 为容器启动时运行,只有一个
3、编译生成 image 文件
docker image build -t front-demo . # -t 指定名字和版本号
docker image ls # 查看
4、运行
docker container run -p 8000:3000 -it front-demo /bin/bash # 交互模式运行并映射端口,同时启动 /bin/bash,会覆盖 CMD 命令
docker container run -rm -p 8000:3000 -it front-demo /bin/bash # 运行完毕后即删除容器文件
真实案例:生成网站
mysql容器
docker container run --name wordpressdb --env MYSQL_ROOT_PASSWORD=123456 --env MYSQL_DATABASE=wordpress -d mysql:5.7
单独php容器
编写Dockerfile
# dockerfile
FROM php:5.6-apache
RUN docker-php-ext-install mysqli
CMD apache2-foreground
制作镜像
docker image build -t php-demo:1.0 .
运行容器
docker run --name php-demo --rm -p 7000:80 --volume "$PWD":/var/www/html --link wordpressdb:mysql php-demo:1.0
Docker compose
编写 docker-compose.yml
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: wordpress
web:
image: php-demo:1.0
links:
- mysql
ports:
- "7000:80"
working_dir: /var/www/html
volumes:
- /tmp/docker-demo/wordpress:/var/www/html
运行
docker-compose up
容器原理
Namespace
Linux的命名空间技术,用于实现进程、文件、网络等资源的隔离
Control Groups CGroup
控制组,用于限制容器的 cpu、内存、网络等使用
UnionFS
联合挂载技术,Dockfile的每一条文件变更命令都会产生一个 layer 层,即文件读写层。
用于实现 docker 的镜像容器文件等的分层技术
发布于 2020/06/08
浏览
次