docker基础篇一
一:介绍
Docker 是一个开源的应用容器。 可以让开发者打包他们的应用以及依赖包到一个轻量级的,可移植的容器中,然后发布到任何linux机器上,也可以实现虚拟化。
二:使用场景
1》Web 应用的自动化打包和发布。
2》自动化测试和持续集成、发布。
3》在服务型环境中部署和调整数据库或其他的后台应用。
4》从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
三:docker安装
使用官方的二进制包安装
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
及
curl -sSL https://get.daocloud.io/docker |
查看版本
docker version
四:镜像
1》 查找镜像,拉取镜像
docker search centos
docker pull centos
2》显示镜像
docker images
docker inspect centos //镜像详细信息
3》删除镜像
docker rmi centos,// 可以指定镜像名称或者镜像ID
docker rmi `docker images -q` //删除所有的镜像,注意使用
hudandeMacBook-Air:dockerjdk8 hudan$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0d120b6ccaa8 5 days ago 215MB
说明:
REPOSITORY, 镜像的仓库
TAG , 镜像的标签版本号
IMAGE ID , 镜像ID
CREATED, 创建时间
SIZE, 镜像大小
五:容器
1》容器启动,并进入容器内
docker run -it --name=mycentos centos /bin/bash
参数说明:
-i: 运行容器
-t: 分配一个伪终端,登录并且进入容器里。
- - name: 容器名称
-d: 后台启动的进程
-v:宿主目录挂载到容器的目录
-p:宿主的端口号映射到容器的端口号,
-v,-p 的第一个参数是宿主机,第二个参数是容器内。
退出, exit, 则此时的容器是停止的状态
2》后台启动容器,也就是一个守护进程
docker run -di --name=mycentos3 centos
输出一个容器ID,
那么怎么进入该容器内:
docker exec -it mycentos3 /bin/bash
退出,exit, 则此时的容器还是运行的状态
3》显示所有容器
docker ps
hudandeMacBook-Air:dockerjdk8 hudan$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d0bb536e6bcb centos "/bin/bash" 5 minutes ago Up 5 minutes mycentos3
d345293d2e22 centos/mysql-57-centos7 "container-entrypoin…" 9 hours ago Up 9 hours 0.0.0.0:3307->3306/tcp mysql1
说明:
CONTAINER ID: 容器ID
IMAGE:使用镜像名称
COMMAND:备注信息
CREATED:创建时间
STATUS :启动状态(up,Exited)
PORTS : 映射端口号
NAMES: 容器名称
不加参数显示所有的运行容器
-a : 显示所有的容器(包括运行和停止容器)
4》启动容器和停用容器
docker start mycentos3 //启动容器
docker stop mycentos3 //停用容器
5》删除容器
docker rm mycentos3 //容器名称或容器ID
docker rm `docker ps -a -q` //删除所有的容器,注意使用
六:文件拷贝
1》 将宿主机的文件拷贝到容器
docker cp abc.txt mycentos3:/root
2》将容器的文件拷贝到宿主机
docker cp mycentos3:/root/abc.txt ./
七:docker使用
1》部署mysql
a: 拉取mysql
docker search mysql
docker pull mysql/mysql-server
b:启动容器
docker run -di --name=mysql57 -p 3308:3306 -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7
注意:-p : 3308 是宿主机端口,3306 是容器端口,将宿主机3308端口,映射到容器3306端口。
MYSQL_ROOT_PASSWORD 是设置mysql 的密码,登录容器下,进入mysql不需要密码,终端要连接是需要使用root。
2》部署nginx
a:拉取nginx
docker search nginx
docker pull nginx
b:启动容器
docker run -di --name=mynginx -p 8089:80 nginx
浏览器访问:
注意:-p: 8089 是宿主机端口, 80 是容器端口, 将宿主机8089映射到容器的端口
3》部署 redis
a: 拉取redis
docker search redis
docker pull redis
b:启动容器
docker run -di --name=myredis -p 6389:6379 redis
4》以上都是多个容器单个部署,那么有什么方式可以多个容器一起启动么????
可以, 通过docker-compose, 一次启动多个容器, 配置一个yml文件,
1:安装docker-compose
a:下载docker-compose 二进制包,并修改其二进制包添加可执行权限
curl -L https://github.com/docker/compose/releases/download/1.24.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -version
2: docker-compose 命令
3:docker-compose.yml 文件编辑
version: '3'
services:
redis1:
image: redis
ports:
- "6379:6379"
container_name: "redis1"
networks:
- dev
mysql1:
image: centos/mysql-57-centos7
environment:
MYSQL_ROOT_PASSWORD: "root"
ports:
- "3306:3306"
container_name: "mysql1"
networks:
- dev
web1:
image: tomcat
ports:
- "9090:8080"
container_name: "web1"
networks:
- dev
- pro
networks:
dev:
driver: bridge
pro:
driver: bridge
注意:dev, pro 是当前是在那个网端里。如在同一网端,说明可以相互访问。
4:启动容器和停用容器
docker-compose up -d
注意:-d :是可以在后台运行
可以通过浏览器访问nginx.
八:备份和迁移—保存镜像
将容器备份成镜像,然后备份,备份的镜像可以恢复和重新使用
docker commit web2 mynginx // web2 容器, mynginx 新生成的镜像
docker save -o mynginx.tar mynginx //将镜像备份mynginx.tar
docker load -I mynginx.tar //将压缩包加载镜像
九:docker file — 构建镜像
docker-compose 是将所有的容器统一启动,备份和迁移是可以一本地容器修改后,拷贝到另一服务器上,
Dockerfile 是可以构建一个镜像。
a: vi Dockerfile
FROM centos:7
MAINTAINER ITCAST
WORKDIR /usr
RUN mkdir /usr/local/java
ADD jdk-8u202-linux-x64.tar.gz /usr/local/java/
ENV JAVA_HOME /usr/local/java/jdk1.8.0_202
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
b: docker build -t='jdk1.8’ .
c: docker images