# Docker
# 容器和虚拟机的区别
容器是APP层面的隔离
虚拟化是物理资源层面的隔离
# Vagrant
下载
VirtualBox && Vagrant
在一个目录下生成
Vagrantfile
,并启动。
vagrant init centos/7
# 启动
vagrant up
# 登录
vagrant ssh
# 状态
vagrant status
# 关闭
vagrant halt
# 删除
vagrant destroy
# 安装 Docker
https://docs.docker.com/install/linux/docker-ce/centos/ (opens new window)
# 启动
sudo systemctl start docker
# Docker 介绍
Docker 提供了一个开发,打包,运行app的平台,把app和底层的 infrastructure 隔离开来。
docker client 与 server(dockerd) 通过 REST API通信,所以可以在同一台机器上,也可以在不同的机器上通过网络来通信。
# Image & Container
# sh
# docker
# image list
docker image ls
# remove image
docker rmi image-name
# container list (include stoped c)
docker ps -a
# run container
docker run hello-world
# run container and interactive execution
docker run -it image-name /bin/bash
# list of container id
docker container ls -aq
# Force-remove a running container
docker rm -f container-name
# rm all container
docker rm $(docker ps -aq)
docker rm $(docker ps -f "status=exited" -q)
# Remove all stopped containers
docker rm $(docker ps -aq)
# build image
docker build -t image-name .
# 如果build出现问题,可以采用交互式进入debug问题
docker run -it b9533a95a065 /bin/bash
# 端口映射
docker run -d -p 8080:80 image-name
# 后台运行
docker run -d vanoneang/node-hell
# 交互式进入运行的container中
docker exec -it aa4869b97116 /bin/bash
# 查看network
docker network ls
# 查看某个container的网络详细(上一个命令的 NETWORK ID bridge),拿到IP地址
docker network inspect d2b09b5d9aeb
# 设置container flask-redis的环境变量 REDIS_HOST=redis,如果容器中的程序需要通过读取环境变量的方式来读取配置,这样可以设置不同的环境变量
docker run -d --link redis --name flask-redis -e REDIS_HOST=redis vanoneang/flask-redis
# Dockerfile
FROM scratch # 制作base image
FROM centos # 使用base image
LABEL maintainer="123@qq.com"
LABEL version="1.0.0"
LABEL description="帮助信息"
RUN yum update && yum install -y vim # 为了避免出现多个层(layer)尽量把命令写在一行
WORKDIR /test # 如果没有会自动创建test目录
WORKDIR demo
RUN pwd # 输出结果应该是 /test/demo 避免使用 RUN cd
ADD test.tar.gz / # 添加到根目录并解压
WORKDIR /root
ADD hello.js test/ # /root/test/hello.js
WORKDIR /root
COPY hello.js test/ # /root/test/hello.js COPY 比 ADD 优先使用,
ENV MYSQL_VERSION 5.6 # 设置常量
RUN apt-get install -y mysql-server="${MYSQL_VERSION}" \
&& rm -rf /var/lib/apt/lists/* # 引用常量
ADD test.sh /root/home
RNTRYPOINT ["test.sh"] # 永远会执行
CMD echo "hello world"
CMD echo "hello docker" # 只执行最后一个
FROM ubuntu
RUN apt-get update && apt-get install -y stress
ENTRYPOINT ["/usr/bin/stress"]
CMD [] # 通过命令行输入参数,上一行的ENTRYPOINT是命令
docker run -it 打包后的镜像 [参数]
# 端口映射
# 将container的80端口映射到服务器的80端口
docker run --name web -d -p 80:80 nginx
← Git