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 浏览