Docker
1.容器使用
docker run 命令
在容器内运行一个应用程序
runoob@runoob:~$ docker run ubuntu:15.10 /bin/echo "Hello world"
Hello world
各个参数解析:
- docker: Docker 的二进制执行文件。
- run: 与前面的 docker 组合来运行一个容器。
- ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
- /bin/echo “Hello world”: 在启动的容器里执行的命令
运行交互式的容器
docker 的两个参数 -i -t,让 docker 运行的容器实现**“对话”**的能力
runoob@runoob:~$ docker run -i -t ubuntu:15.10 /bin/bash
root@0123ce188bd8:/#
各个参数解析:
-t:在新容器内指定一个伪终端或终端。
-i:允许你对容器内的标准输入 (STDIN) 进行交互。
启动容器(后台模式)
runoob@runoob:~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
命令
1.帮助命令
docker command --help
2.查看容器
docker ps -a
2.查看log
docker logs [CONTAINER ID]/[NAME]
-f
4.启动容器
docker start [CONTAINER ID]/[NAME]
5.停止容器
docker stop [CONTAINER ID]/[NAME]
6.后台运行
docker run -itd --name ubuntu-test ubuntu /bin/bash
7.重启容器
docker restart [CONTAINER ID]/[NAME]
8.进入容器
docker attach [CONTAINER ID]/[NAME]
docker exec -it [CONTAINER ID]/[NAME] /bin/bash [推荐]
9.导出和导入容器
docker export [CONTAINER ID] > ubuntu.tar
cat docker/ubuntu.tar | docker import - test/ubuntu:v1
docker import http://example.com/exampleimage.tgz example/imagerepo
10.删除容器
docker rm -f [CONTAINER ID]
11.运行一个 web 应用
docker run -d -P training/webapp python app.py
docker run -d -p 5000:5000 training/webapp python app.py
12.查看网络端口
docker port [CONTAINER ID]/[NAME]
13.移除WEB应用容器
docker rm [CONTAINER ID]/[NAME]
2.镜像使用
1.列出所有镜像
docker images
2.获取一个新的镜像
docker pull
3.查找镜像
docker search
4.删除镜像
docker rmi
5.创建镜像
(1)更新镜像
容器内使用 apt-get update
docker commit -m="has update" -a="runoob" [CONTAINER ID] runoob/ubuntu:v2
(2)构建镜像
cat Dockerfile
docker build
6.设置镜像标签
ocker tag [CONTAINER ID] runoob/centos:dev
3.容器连接
1.容器命名
docker -name
2.新建网络
docker network create -d bridge test-net
3.连接容器
docker run -itd --name test1 --network test-net ubuntu /bin/bash
4.配置 DNS
/etc/docker/daemon.json
{
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
}
5.手动指定容器的配置
docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu
--rm:容器退出时自动清理容器内部的文件系统。
-h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。
--dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。
--dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。
4.Dockerfile
FROM
构建镜像基于哪个镜像
MAINTAINER
镜像维护者姓名或邮箱地址
RUN
构建镜像时运行的指令
CMD
运行容器时执行的shell环境
VOLUME
指定容器挂载点到宿主机自动生成的目录或其他容器
USER
为RUN、CMD、和 ENTRYPOINT 执行命令指定运行用户
WORKDIR
为 RUN、CMD、ENTRYPOINT、COPY 和 ADD 设置工作目录,就是切换目录
HEALTHCHECH
健康检查
ARG
构建时指定的一些参数
EXPOSE
声明容器的服务端口(仅仅是声明)
ENV
设置容器环境变量
ADD
拷贝文件或目录到容器中,如果是URL或压缩包便会自动下载或自动解压
COPY
拷贝文件或目录到容器中,跟ADD类似,但不具备自动下载或解压的功能
ENTRYPOINT
运行容器时执行的shell命令
route add -p 172.17.0.0 mask 255.255.0.0 192.168.1.15[linux ip]
Docker网络配置
docker的网络(bridge,host,none)
docker network ls
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker run -itd --name nginx-test --network my_net1 -p 8081:80 -v /usr/local/nginx/www:/usr/share/nginx/html -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/nginx/conf.d:/etc/nginx/conf.d -v /usr/local/nginx/logs:/var/log/nginx nginx
docker run -itd --name tomcat-test --network my_net1 -p 8081:8080 -v /usr/tomcat/tomcat1/webapps:/usr/local/tomcat/tomcat1/webapps tomcat
docker run -it -p 3306:3306 --name mysql01 --network my_net1 -v /usr/local/mysql_data/conf:/etc/mysql/conf.d -v /usr/local/mysql_data/data:/var/lib/mysql -v /usr/local/mysql_data/logs:/logs -e MYSQL_ROOT_PASSWORD=123456 -d mysql
docker run -it --privileged=true --network my_net1 --name redis-test -p 6379:6379 -v /usr/local/redis/conf/redis.conf:/etc/redis/redis.conf -v /usr/local/redis/data:/data -d redis:4.0 redis-server /etc/redis/redis.conf --appendonly yes