Docker的安装
Docker依赖的环境
想要安装Docker,需要先讲依赖的环境全部下载,就像Maven依赖JDK一样
yum -y install yum-utils device-mapper-persistent-data lvm2
指定Docker镜像源
默认下载Docker会去国外服务器下载,速度较慢,我们可以设置为阿里云镜像源,速度更快
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
ubuntu
sudo apt-add-repository http://mirrors.aliyun.com/docker-ce/linux/ubuntu/docker-ce.repo
安装Docker
依然采用yum的方式安装
yum makecache fast
yum -y install docker-ce
启动Docker并测试
安装成功后,需要手动启动,设置为开机自启,并测试一下Docker
# 启动Docker服务
systemctl start docker
# 设置开机自动启动
systemctl enable docker
# 测试 运行hello-world 镜像 根据这个镜像 创建容器
docker run hello-world
查看本地全部镜像
docker images
配置阿里云镜像地址
访问该地址
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
复制这段代码,粘贴运行
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker-Compose
之前运行一个镜像,需要添加大量的参宿,可以通过Docker-Compose编写这些参数。而且Docker-Compose可以帮助我们批量的管理容器。这些信息只需要通过一个docker-compose.yml文件去维护即可。
下载并安装Docker-Compose
下载并Docker-Compose
去github官网搜多docker-compose,下载1.24.1版本的Docker-Compose
github地址:https://github.com/docker/compose
下载路径:https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64
建议安装方式
# 直接联网下载到本地 /usr/local/bin/docker-compose
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
进入这个目录,给这个文件夹权限
chmod 777 docker-compose
测试
任意目录输入:
docker-compose
Docker-Compose管理MySQL和Tomcat容器
yml文件以key:value方式来指定配置信息
多个配置信息以换行+锁紧的方式来区分
在docker-compose.yml文件中,不要使用制表符
version: '3.1'
services:
mysql: # 服务的名称
restart: always # 代表只要docker启动,那么这个容器就跟着一起启动
image: daocloud.io/library/mysql:5.7.4 # 指定镜像路径
container_name: mysql # 指定容器名称
ports:
- 3306:3306 #指定端口号的映射
environment:
MYSQL_ROOT_PASSWORD: root # 指定MySQL的ROOT用户登录密码
TZ: Asia/Shanghai # 指定时区
volumes:
- /opt/docker_mysql_tomcat/mysql_data:/var/lib/mysql # 映射数据卷
tomcat:
restart: always
image: daocloud.io/library/tomcat:8.5.15-jre8
container_name: tomcat
ports:
- 8080:8080
environment:
TZ: Asia/Shanghai
volumes:
- /opt/docker_mysql_tomcat/tomcat_webapps:/var/local/tomcat/webapps
- /opt/docker_mysql_tomcat/tomcat_logs:/usr/local/tomcat/logs
使用docker-compose命令管理容器
在使用docker-compose的命令时,默认会在当前目录下找docker-compose.yml文件
# 1. 基于docker-compose.yml启动管理的容器
docker-compose up -d
# 2. 关闭并删除容器
docker-compose down
# 3. 开启|关闭|重启已经存在的有docker-compose维护的容器
docker-compose start|stop|restart
# 4. 查看由docker-compose管理的容器
docker-compose ps
# 5. 查看日志
docker-compose logs -f
创建docker-compose.yam文件和要映射的文件夹
启动容器
看到启动成功
docker-compose配合Dockerfile使用
使用docker-compose.yml文件以及Dockerfile文件在生成自定义镜像的同时启动当前镜像,并且由docker-compose去管理容器
docker-compose文件
编写docker-compose.yml文件
#yml文件
version: '3.1'
services:
ssm:
restart: always
build: # 构建自定义镜像
context: ../ # 指定dockerfile文件的所在路径
dockerfile: Dockerfile # 指定Dockerfile文件名称
image: ssm:1.0.1
container_name: ssm
ports:
- 8082:8080
environment:
TZ: Asia/Shanghai
Dockerfile文件
编写Dockerfile文件
from daocloud.io/library/tomcat:8.5.15-jre8
#copy ssm.war /usr/local/tomcat/webapps
镜像的操作
拉取镜像
从好枞阳仓库拉取镜像到本地
docker pull 镜像名称[:tag]
# 举个例子
docker pull daocloud.io/library/tomcat:8.5.15-jre8
删除本地镜像
需要先删除对应的容器,才能删除镜像
docker rmi 镜像id
#例如
docker rmi 9c7a54a9a43c
镜像的导入导出
如果因为网络原因可以通过硬盘的方式传输镜像,虽然不贵放,但是有效,但是这种方式导出的镜像名称和版本都是null,需要手动修改
# 将本地的镜像导出
docker save -o 导出的路径 镜像id
# 例如
docker save -o /usr/local/tmp/mytomcat8 b8dfe9ade316
# 加载本地的镜像文件
docker load -i 镜像文件
# 例如
docker load -i mytomcat8
# 修改镜像名称
docker tag 镜像id 新的镜像名称:版本
# 例如
docker tag b8dfe9ade316 mytomcat:1.0
加载本地镜像
修改镜像名称
使用本地导入的镜像运行一个容器
docker run -d -p 8080:8080 --name tomcat8 b8dfe9ade316
容器操作
运行容器
运行容器需要指定具体镜像,如果镜像不存在,会直接下载
# 简单操作
dorker run 镜像的标识|镜像名称[:tag]
# 常用的参数
docker run -d -p 宿主机端口:容器端口 --name 容器标识 镜像的标识|镜像名称[:tag]
# -d:代表后台运行容器
# -p:宿主机端口:容器端口;为了映射当前Linux的段都和容器的端口
# --name:容器名称,指定容器的名称
# 例如
docker run -d -p 8080:8080 --name tomcat8 b8dfe9ade316
镜像标识直接复制docker images
看到的列表
成功访问
查看当前运行的容器
docker ps
# 查看所有容器
docker ps -a
查看容器日志
docker logs -f 容器id
# -f:可以滚动查看日志的最后几行
进入容器内部
可以进入容器内部进行操作
docker exec -it 容器id bash
# 例如
docker exec -it a927e08235da bash
查看里面的目录,说明一个容器就是一个独立的Linux系统
退出容器
快捷键
control+p+q
复制内容到容器
将宿主机的文件复制到容器内部的指定目录
docker cp 文件名称 容器id:容器内部路径
将容器内部的文件复制到宿主机
docker cp 容器id:容器目录 宿主机目录
尝试修改容器内部文件,在容器内部还不能用vi编辑文件,讲起拷贝到宿主机,修改完,再拷贝回去
启动容器
docker start 容器id
# 重启容器
docker restart 容器id
停止容器
docker stop 容器id
# 停止所有容器
docker stop $(docker ps -qa)
删除容器
docker rm 容器id
# 例如
docker rm ed8fe073fe33
# 删除全部容器
docker rm $(docker ps -qa)
提交运行时容器成为镜像
docker commit -a='作者' -m='备注' 运行时容器ID 新镜像名称
# 例如
docker commit -a='zsx' -m='test' 85650af9f9ac tomcat8new
查看容器元信息
docker inspect 容器id
设置容器自动启动
docker update --restart=always 容器id
# 例如
docker update --restart=always 85650af9f9ac
Docker应用
Docker安装Tomcat
docker run -d -p 8080:8080 --name tomcat8088 daocloud.io/library/tomcat:8.5.15-jre8
Docker安装MySQL
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 daocloud.io/library/mysql:5.7.4
容器卷
为了部署SSM的工程,需要使用到cp的命令将宿主机内的ssm.war文件复制到容器内部
数据卷:将宿主机的一个目录映射到容器的一个目录中。
可以在宿主机中操作目录中的内容,那么容器内部的文件,也会跟着一起改变
创建数据卷
创建数据卷之后,默认会存放在一个目录下/var/lib/docker/volumes/数据卷名称/_data
docker volume create 数据卷名称
查看数据卷详情
查看数据卷的详细信息,可以查询到存放路径,创建时间等等
docker volume inspect 数据卷名称
查看全部数据卷
docker volume ls
删除数据卷
docker volume rm 数据卷名称
容器映射数据卷
映射有两种方式:
- 通过数据卷名称映射,如果数据卷不存在,Docker会帮你自动创建,会将容器内部自带的文件,存储在默认的存放路径中
- 通过路径映射数据卷,直接指定一个路径作为数据卷的存放位置,但是这个路径下是空的
# 通过数据卷名称映射
docker run -v 数据卷名称:容器内部的路径 镜像id
# 通过路径映射数据卷
docker run -v 路径:容器内部的路径 惊喜那个id
Dockerfile自定义镜像
我们可以从中央仓库下载一个镜像,也可以自己手动制作一个镜像,需要通过Dockerfile去指定自定义镜像的信息
Dockerfile
创建自定义镜像就需要创建一个Dockerfile,如下为Dockerfile的语言
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于操作系统(centos或者Ubuntu)基础镜像并最终创建一个新镜像;
我们前面讲过的用手动的方式,修改配置文件,或者添加、删除文件目录的方式,来构建一种新镜像;这种手工方式麻烦,容易出错,而且不能复用;
我们这里将Dockerfile,用脚本方式来构建自动化,可复用的,高效率的创建镜像方式,是企业级开发的首选方式
在软件系统开发生命周期中,采用Dockerfile来构建镜像:
- 对于开发人员:可以为开发团队提供一个完全一致的开发环境;
- 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作;
- 对于运维人员:在部署时,可以实现应用的无缝移植。
from: 指定当前自定义镜像依赖的环境 指定基础镜像 一切丑姑娘这里开始构建
copy: 将相对路径下的内容复制到自定义镜像中
workdir: 生命镜像的默认工作目录
run: 执行的命令,可以编写多个
cmd: 需要执行的明林(在workdir下执行的,cmd可以写多个,只以最后一个为准)
# 举个例子,制作SSM容器镜像,而且ssm.war要放在Dockerfile的同级目录下
from daocloud.io/library/tomcat:8.5.15=jre8
copy ssm.war /usr/local/tomcat/webapps
通过Dockerfile制作镜像
编写完Dockerfile后需要通过命令将其只作为镜像,并且要在Dockerfile的当前目录下,之后即可在镜像中查看到指定的镜像信息,注意最后的 .
docker build -t 镜像名称[:tag]
@欧币杰昔
网友评论