docker简介
1.docker的特点
2.docker组件
- docker服务器和客户端
- docker镜像与容器
– 容器是基于镜像创建的实例,docker运用写时复制,在原有镜像基础上进行的操作 - registy(注册中心)–所有仓库的集合,
docker命令
docker镜像命令
- docker images --镜像列表,通过镜像id确定唯一标识,名称+标签也可以确定
- docker serach 搜索镜像 重点关注offical
- docker pull 镜像名称-- 镜像拉取
- docker rmi 镜像id 删除镜像
- docker image -q查看所有镜像id
容器命令
- 创建容器
- docker ps查询在运行的容器
- docker ps -a 所有的容器
- docker ps -l 查看最后一次运行的容器
- docker ps -f status=exited 查看停止的容器
- 创建容器
- docker run -di --name 容器名称 镜像名称:标签 --守护创建
- docker run -it --name 容器名称 镜像名称:标签 /bin/bash --交互式创建
- 停止与启动容器
docker stop
docker start
- 文件拷贝
- docker cp 需要拷贝的文件或目录 容器名称:容器目录
- docker cp 容器名称:容器目录 需要拷贝的文件或目录
- 目录挂载
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --privileged=true --name=mycentos3 centos:7 创建容器添加目录挂载
- 查看容器ip
docker inspect 容器名称(容器ID) 查看容器运行的各种数据
- 查看日志
docker logs -f 容器名称(或容器id)
数据卷管理
- 数据卷
- COMMAND:要运行的数据卷指令
- create:创建一个数据卷
- inspect:显示一个或多个指定数据卷的详细信息
- ls:查看所有的数据卷
- prune:删除所有未使用的数据卷
- rm:删除一个或多个指定的数据卷
- 数据卷挂载
- 创建容器
docker run -id --name=my-nginx -p 8888:80 -v html:/usr/share/nginx/html nginx
- 命令查看数据卷html在宿主机的物理地址
docker volume inspect html
挂载本地文件或文件夹
- 运行nginx的同时挂载一个本地的nginx配置文件,方便以后修改nginx配置
- 创建nginx.conf文件
touch nginx.conf
- 编辑nginx.conf文件
vi nginx.conf
- docker rm my-nginx -f 删除之前的nginx容器
docker run --name my-nginx -p 8888:80 -v html:/usr/share/nginx/html -v $PWD/nginx.conf:/etc/nginx/nginx.conf --privileged=true -id nginx
- 创建新的容器
- 网络管理
- connect:把一个容器连接到指定的network
- create:创建一个network
- disconnect:将一个容器从指定的network断开
- inspect:显示某个network的详细信息
- ls:列出所有的network
- prune:删除未使用的network
- rm:删除指定的一个或多个network
创建network
docker network create -d bridge my-net
docker network inspect my-net
连接network
- 可以将一个已经运行的容器连接到某个network:
docker network connect my-net my-ngin
- 也可以在创建容器时,连接一个network:
- docker run -it --rm --name mycentos --network=my-net centos:7 /bin/bash
迁移和备份
容器保存为镜像
docekr commit my-nginx mynginx_i
镜像备份
docker save -o mynginx.tar mynginx_i
镜像恢复与迁移
docker load -i mynginx.tar
- 应用部署
MySQL部署
- 拉取mysql镜像
docker pull mysql:5.7
- 创建容器
docker run -id -p 3306:3306 --name=mysql -v /mydata/mysql/conf:/etc/mysql/conf.d -v /mydata/mysql/logs:/logs -v /mydata/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7
tomcat部署
- 拉取镜像
docker pull tomcat:7-jre7
- 创建容器
docker run -di --name=mytomcat -p 9000:8080 \
- v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
RabbitMQ部署
- 拉取RabbitMQ镜像
docker pull rabbitmq:3-management
- 运行MQ容器
docker run \
-e RABBITMQ_DEFAULT_USER=guest \
-e RABBITMQ_DEFAULT_PASS=guest \
--name mq \
--hostname mq1 \
-p 15672:15672 \
-p 5672:5672 \
-id \
rabbitmq:3-management
redis部署
- 拉取镜像
- docker pull redis
- 创建容器
- docker run -di --name=myredis -p 6379:6379 redis
Nginx部署
- 拉取镜像
- docker pull nginx
- 先运行一次容器,目的是为了拷贝配置文件
- docker run -p 80:80 --name nginx \
- -v /mydata1/nginx/html:/usr/share/nginx/html \
- -v /mydata1/nginx/logs:/var/log/nginx \
- -d nginx
- 将容器内的配置文件拷贝到指定目录:
- docker cp nginx:/etc/nginx/mydata/nginx/
- 修改文件名称
- cd /mydata/nginx/
- mv nginx conf
- 终止并删除容器
- docker rm -f nginx
- 使用一下命令执行nginx
- docker run -id -p 80:80 --name nginx \
- -v /mydata1/nginx/html:/usr/share/nginx/html \
- -v /mydata1/nginx/logs:/var/log/nginx \
- -v /mydata1/nginx/nginx:/etc/nginx \
- -privileged=true \
- nginx
-在 /mydata/nginx/html 目录下创建 index.html 文件
Dockerfile
- 常用命令
- FROM image_name:tag--定义了使用哪个基础镜像启动构建流程
- MAINTAINER user_name--声明镜像的创建者
- ENV key value--设置环境变量
- RUN command--是dockfile的核心部分
- ADD source_dir/filedest_dir/file--将宿主机的文件复制待容器内,如果是压缩文件,将会自动解压
- COPY source_dir/file dest_dir/file--和ADD相似,但是不能解压
- WORKDIR path_dir--设置工作目录
-Dockerfile实战创建jdk8镜像
- 创建目录
- mkdir -p /usr/local/dockerjdk8
- 下载jdk-8u171-linux-x64.tar.gz并上传到服务器(虚拟机)中的/usr/local/dockerjdk8目录
- 创建文件Dockerfile vi Dockerfile
- #依赖镜像名称和ID
- FROM centos:7
- #指定镜像创建者信息
- MAINTAINER ITCAST
- #切换工作目录
- WORKDIR /usr/local/myjava
- RUN mkdir -p /usr/local/myjava
- #ADD 是相对路径jar,把java添加到容器中
- ADD jdk-8u171-linux-x64.tar.gz /usr/local/myjava/
- #配置java环境变量
- ENV JAVA_HOME /usr/local/myjava/jdk1.8.0_171
- ENV JRE_HOME $JAVA_HOME/jre
- ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME- /lib:$CLASSPATH
- ENV PATH $JAVA_HOME/bin:$PATH
- 执行命令构建对象
- ==docker build -t='jdk8' . # 默认是 latest==
- docker build -t='jdk8:1.8' . # 指定tag版本
- 查看镜像是否完成
- docker images