Docker
镜像
镜像是大家制作的程序包,里面可以只有 linux 环境,也可以包含特定的软件。
1 2 3
| $ docker image ls $ docker image rm [imageName] $ docker image pull hello-world
|
容器
容器是运行中的镜像。docker 会把镜像复制一份,然后运行。
1
| $ docker container run hello-world
|
hello-world 是 docker 官方的镜像。如果没有执行 image pull,会自动下载。
因为容器是镜像复制出来的,所以一旦运行后,也会有文件生成
1 2 3
| $ docker container ls $ docker container ls --all $ docker container rm [containerId]
|
开一个可交互的 nginx 容器
1 2 3 4 5 6 7 8 9
| $ docker container run \ -d \ -p 127.0.0.1:8080:80 \ -p 127.0.0.1:8081:443 \ --rm \ --name mynginx \ --volume "$PWD/html":/usr/share/nginx/html \ --volume "$PWD/conf":/etc/nginx \ nginx
|
针对 linux
1 2 3 4
| $ sudo groupadd docker $ sudo usermod -aG docker $USER $ sudo systemctl start docker $ sudo service docker start
|
Dockerfile
下面来做一个 swoole 本地开发 dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| FROM php:7.2-cli
COPY swoole.tar.gz /tmp
WORKDIR /app
RUN tar -xzf /tmp/swoole.tar.gz -C /tmp/swoole --strip-components=1 \ && phpize \ && ./configure \ && make \ && make install \ && docker-php-ext-enable \ && rm -f /tmp/swoole.tar.gz \ && rm -f /tmp/swoole \
VOLUME ["/app","/www"]
EXPOSE 8081
|
编译运行
1 2
| $ docker image build -t swoole-dev . $ docker container run -p 8000:3000 swoole-dev
|
Docker Compose
如果我们有多个服务,比如 wordpress + mysql,这个时候要先启动 mysql,然后根据 mysql 的 ip,改变 wordpress 的配置。这种情况,就要用到 docker compose 了。下面是一个例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| mysql: image: mysql:5.7 environment: - MYSQL_ROOT_PASSWOD=123456 - MYSQL_DATABASE=wordpress web: image: wordpress links: - mysql environment: - WORDPRESS_DB_PASSWORD=123456 ports: - "127.0.0.1:8080:80" working_dir: /var/www/html volumes: - wordpress: /var/www/html
|
执行
1 2 3
| $ docker-compose up $ docker-compose stop $ docker-compose rm
|
其他有用的命令
1 2 3 4 5 6 7
| $ docker container start [containerId] $ docker container stop [containerId] $ docker container kill [containerId] $ docker container logs [containerId] $ docker container exec -it [containerId] /bin/bash $ docker container cp [containerId]:[/path/to/file] $ docker container inspect [containerId]
|
参考资料:
http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html
http://www.ruanyifeng.com/blog/2018/02/docker-wordpress-tutorial.html
http://www.ruanyifeng.com/blog/2018/02/nginx-docker.html