内容
Docker是什么、能做什么、如何在linux服务器上安装docker、配置阿里云镜像加速器、了解容器的常用操作、基于docker运行tomcat,mysql、当需要安装一个新的容器的时候如何做、在阿里云创建一个镜像仓库然后提交,拉取镜像
docker介绍
官网首页:我们帮助开发人员和开发团队构建和发布应用程序
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到Linux机器上。可以避免开发时运行环境和运行时环境不一致导致的问题。
Docker架构
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。包括三个基本概念:
镜像(Image):将软件环境打包好的模板,用来创建容器的。一个镜像可以创建多个容器
容器(Container):启动一个镜像就是一个容器,容器与容器之间相互隔离,并且互不影响。 容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次 在另外一台机器上使用这个镜像时候,只需要从仓库上pull下来就可以了。
linux服务器上安装docker
全程使用阿里云的服务器来操作。以centos7为例,Docker 要求操作系统必须为64位,且centos内核版本为3.1及以上。
查看系统内核uname -r
。当前内核版本3.10.0-514.26.2.el7.x86_64
-
安装软件依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
-
设置yum源
-
官方源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
-
阿里云
yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
-
安装docker-ce
yum install docker-ce -y
- 查看所有版本
yum list docker-ce.x86_64 --showduplicates | sort -r
- 安装指定版本
yum install docker-ce-<VERSION_STRING> -y
- 查看所有版本
-
完成安装后可以使用
docker version
查看安装的版本
配置阿里云镜像加速器
这里使用阿里云的免费镜像加速服务
-
注册登录并开通容器镜像服务
-
查看控制台并找到镜像加速器
3.1 可以直接复制官方提供的shell命令。注意填写自己的加速器地址
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://85ghluhq.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
3.2 可以修改daemon配置文件/etc/docker/daemon.json来使用加速器
-
修改daemon配置文件/etc/docker/daemon.json
{ "registry-mirrors": ["https://85ghluhq.mirror.aliyuncs.com"] }
-
通知systemd重载此配置文
systemctl daemon-reload
-
重启docker服务
systemctl restart docker
Docker的常用操作
镜像的常用操作
查找镜像,搜索docker hub网站镜像的详细信息
docker search 关键字
下载镜像,Tag表示版本,有些镜像的版本显示latest,为最新版本
docker pull 镜像名:TAG
删除镜像,-f 表示强制删除
docker rmi -f 镜像ID或者镜像名:TAG
查看本地镜像列表
docker image list
获取元信息
docker inspect 镜像ID或者镜像名:TAG
容器的常用操作
运行
docker run --name 容器名 -i -t -p 主机端口:容器端口 -d -v 主机目录:容器目录:ro 镜像ID或镜像名:TAG
# --name 指定容器名,可自定义,不指定自动命名
# -i 以交互模式运行容器
# -t 分配一个伪终端,即命令行,通常-it组合来使用
# -p 指定映射端口,讲主机端口映射到容器内的端口
# -d 后台运行容器
# -v 指定挂载主机目录到容器目录,默认为rw读写模式,ro表示只
容器列表
docker ps -a -q
# docker ps查看正在运行的容器
# -a 查看所有容器(运行中、未运行)
# -q 只查看容器的ID
启动容器
docker start 容器ID或容器名
停止容器
docker stop 容器ID或容器名
删除容器
docker rm -f 容器ID或容器名
# -f 表示强制删除
查看日志
docker logs 容器ID或容器名
进入正在执行的容器
docker exec -it 容器ID或者容器名 /bin/bash
# 进入正在运行的容器并且开启交互模式终端
# /bin/bash是固有写法,作用是因为docker后台必须运行一个进程,否则容器就会退出,在这里表示启动容器后启动bash。
拷贝文件
#主机中文件拷贝到容器中
docker cp 主机文件路径 容器ID或容器名:容器路径
#容器中文件拷贝到主机中
docker cp 容器ID或容器名:容器路径 主机文件路径
获取容器元信息
docker inspect 容器ID或容器名
查看容器端口
docker port 容器ID或容器名
基于docker运行tomcat,mysql
通过拉取tomcat、mysql镜像并启动来使用docker命令
运行tomcat
拉取tomcat镜像 docker pull tomcat
查看拉取的tomcat镜像 docker image list
运行tomcat docker run --name mytomcat -it -d -p 80:8080 tomcat
查看运行情况 docker ps -a
查看tomcat的日志 docker logs mytomcat
mytomcat容器已经运行,根据ip地址访问404。进入容器查看webapps
可以看到webapps下是空的,404就不是很意外了。先删除webapps,再执行命令cp -r webapps.dist/ webapps
把webapps.dist里的内容拷贝到webapps里。
重启一下mytomcat容器 docker restart mytomcat
,发现访问还是404。这就尴尬了,吃个饭等它一会,回来后发现竟然能访问到tomcat首页了。这可怎么办?查看一下mytomcat容器的日志 docker logs mytomcat
使用[SHA1PRNG]创建securerrandom实例生成session ID花费了[678,407]毫秒。
具体原因就不说了,直接上解决办法
1.tomcat镜像使用的是最新版本,内置的jdk使用的是jdk11.首先找到JAVA_HOME目录。 echo $JAVA_HOME
。在该目录下的conf/security/java.security 中
# 修改前
securerandom.source=file:/dev/random
# 修改后
securerandom.source=file:/dev/./urandom
先把文件拷贝出来,修改完成后再拷贝回去
在容器/usr/local/openjdk-11/conf/security/
使用 more +/securerandom java.security
查看是否修改成功
重启容器,就可以直接访问了。
2.由于直接修改镜像文件里的文件太过暴力,还提供了另一种解决方案,在镜像创建时使用-v命令来覆盖此文件
docker run --name mytomcat -p 80:8080 -d -v /etc/docker/java.security:/usr/local/openjdk-11/conf/security/java.security tomcat
此处需要使用绝对路径。重新生成镜像后webapps文件夹里是空的
运行mysql
拉取mysql5.7版本 docker pull mysql:5.7
,这里就直接开始启动了。
docker run --name mysql5.7 -p 3306:3306 -d mysql:5.7
结果发现没启动。
mysql启动时需要指定初始密码 -e MYSQL_ROOT_PASSWORD=my-secret-pw
docker run --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
进入容器连接mysql
由于编码问题,存储中文字符会报错,我们需要修改配置文件
使用自定义的配置文件
MySQL的默认配置可以在/etc/mysql/my.cnf中找到,可以使用-v来覆盖配置文件
存储的数据
/var/lib/mysql
存储数据的地方
启动时配置
创建/mysql/data 和 /mysql/conf,
docker cp mysql:/etc/mysql/mysql.conf.d/mysqld.cnf /mysql/conf/
启动命令
docker run --name mysql5.7
-p 3306:3306
-v /mysql/conf:/etc/mysql/mysql.conf.d
-v /mysql/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456
-d mysql:5.7
启动一个新的容器的时候如何做
直接上DockerHub搜索镜像,然后查看镜像的Description
将构建的镜像提交到阿里云的镜像仓库
创建阿里云镜像仓库
-
点击个人版,进入仓库管理,点击创建命名空间
-
进入镜像仓库,创建镜像仓库。
私有的话只有自己可以看到,公开的话可以在镜像搜索里查找
-
选择本地仓库,创建完成
提交镜像
点击仓库查看基本信息,里面包括操作指南。下面根据操作指南提交镜像
登录阿里云Docker Registry, 用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
docker login --username=夜幕挽歌滴答滴答 registry.cn-shanghai.aliyuncs.com
将镜像推送到Registry。
# 阿里云api
docker tag [ImageId] registry.cn-shanghai.aliyuncs.com/xiaoludan/myrepository:[镜像版本号]
# 替换后
docker tag 8652b9f0cb4c registry.cn-shanghai.aliyuncs.com/xiaoludan/myrepository:v1
执行完成后会生成一个新的镜像
推送
# 阿里云api
docker push registry.cn-shanghai.aliyuncs.com/xiaoludan/myrepository:[镜像版本号]
# 替换后
docker push registry.cn-shanghai.aliyuncs.com/xiaoludan/myrepository:v1
拉取镜像
# 阿里云api
docker pull registry.cn-shanghai.aliyuncs.com/xiaoludan/myrepository:[镜像版本号]
# 替换后
docker pull registry.cn-shanghai.aliyuncs.com/xiaoludan/myrepository:v2