您的位置:首页 > 运维架构 > Docker

企业应用交付Docker镜像进阶实战笔记

2020-07-30 10:29 381 查看

一、准备工作

1.1 查看内核

// 保证内核 3.10 以上
uname -r

1.2 卸载旧版docker

yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
// docker默认工作路径
rm -rf /var/lib/docker

1.3 安装依赖

yum -y install yum-utils

1.4 设置国内阿里云镜像仓库

yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.5 更新yum

yum makecache fast

1.6 安装Docker

// docker-ce 社区版本 docker-ee 企业版
yum install docker-ce docker-ce-cli containerd.io

1.7 启动Docker测试

// 启动
systemctl start docker
// 查看信息
docker version
// 测试helloword
docker run helloword

1.8 查看镜像

docker images

二、阿里云镜像加速

2.1 登录阿里云账号

2.2 镜像加速

2.3 配置加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://e5yl33pf.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

三、Docker命令

docker info
docker 命令 --help

3.1 镜像命令

// 查看本地所有的镜像
docker images// 搜索 镜像
docker search mysql
// 下载默认最新的镜像  分层下载Docker的核心 文件系统
docker pull mysql
// 下载指定版本的镜像
docker pull mysql:5.7
// 删除镜像
docker rmi -f imageID
// 删除所有镜像
docker rmi -f $(docker images -aq)

四、容器命令

4.1 常用命令

docker run  [可选参数] imageid
--name="名字" tomcat01 tomcat02
-d 后台方式运行
-it 进入容器交互运行
-p 主机端口:容器端口   指定容器端口

4.2 运行centos镜像

docker pull centos
docker run -it centos /bin/bash


// 列出所有运行的Docker
docker ps

// 删除容器
docker rm 容器ID
// 强制删除所有,包括运行的容器
docker rm -f $(docker ps -aq)

4.3 Docker容器启动停止

docker start  容器ID
docker restart  容器ID
docker stop  容器ID
docker kill  容器ID

4.4 日志,元数据,进程

// 后台运行
docker run -d 镜像名/镜像ID

// 查看日志
docker logs -t -f --tail 10 容器ID

// 进程信息
docker top 容器ID

// 元数据
docker inspect 容器ID

4.5 进入运行容器修改配置

// 1:进入运行容器
docker exec it 容器ID /bin/bash

// 2.进入正在运行容器
docker attach  容器ID /bin/bash

4.6 拷贝命令

// 从容器内部拷贝到主机
// 1.进去容器
docker attach 容器ID
// 2.需要拷贝的内容
touch test.txt
// 3.退出容器
exit
// 4. 拷贝到主机
docker cp 容器ID:/home/test.txt /home

五、Docker部署Nginx

docker search nginx
docker pull nginx
docker imagesdocker run -d --name nginx01 -p:3344:80 nginx
docker ps

// 进入容器才可以修改文件配置 重启!!!
docker exec -it nginx01 /bin/bash
-v 数据卷的技术可以解决

六、Docker部署Tomcat

docker pull tomcat
docker run -d -p 8081:8080 --name tomcat01 tomcat

七、Docker部署ES+Kibana

7.1 部署ElasticSearch 7.6.2

// es 端口多
// es 耗内存
// es 的数据一般要放置到安全目录 挂载
docker run -d --name elasticsearch01 -p 9200:9200 -e  "discovery.type=single-node" elasticsearch:7.6.2

7.2 【解决卡顿 内存消耗问题】

ES默认启动1G内存,我的阿里云是1核2G内存,这是原因。

// 查看cpu
docker stats

// 关闭
docker stop 容器ID
// 增加内存限制
docker run -d --name elasticsearch02 -p 9200:9200 -e  "discovery.type=single-node"  -e ES_JAVA_OPTS="-Xms64m -Xmx512m"  elasticsearch:7.6.2


问题解决!!!

7.3 Docker部署Kibana

问题思考?
可以通过localhost 链接ES吗??

八、Portainer可视化工具

docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --priviledged=true portainer/portainer

访问http://localhost:8088

九、Commit镜像【保存当前状态或者打包】

// 提交容器成为一个新的副本
docker commit

docker commit -m="提交的描述信息" -a="作者" 容器ID  目标镜像名:[tag]

9.1 测试

// 启动Tomcat
docker run -it -p 8080:8080 tomcat
// 进入容器
docker exec -it 容器ID /bin/bash

cd /usr/local/tomcat
cp -r webapps.dist/* webapps

// 现在这个镜像我修改了  想要提交
docker commit -a="古力娜扎" -m="add webapps app"  容器ID  tomcat02:1.0

十、容器数据卷【数据同步】

10.1 概述

将应用打包成一个镜像
容器删除后,数据,数据持久化怎么办?
需求:MySql数据可以共享同步到本地
就是讲容器中的目录挂载到Linux中,多个容器也可以

10.2 目录挂载

// 挂载
docker run -it -v 主机目录:容器目录 xxxxx  /bin/bash

// 查看容器信息
docker inspect 容器ID


容器内外的目录数据 同步更新

10.3 Docker实现Mysql数据同步

如何实现数据持久化,数据同步?

docker pull mysql:5.7
docker images// 运行并挂载配置目录 数据目录 密码
docker run -d -p 3307:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7


本地同步的数据,数据库数据同步:

10.4 匿名挂载

// 会在本机自动创建一个目录进行同步
docker run -d -P --name nginx01 -v /etc/nginx  nginx
// 查看挂载情况
docker volume ls
// 查看卷
docker volume inspect juming-nginx


十一、Dockerfile构建镜像【命令脚本】

11.1 命令

FROM centos
VOLUNE ["volume01","volume02"]

CMD ECHO "====END===="
CMD /bin/bash
docker build -f /home/volume-test/dockerfil1 -t /wang/centos .

11.2 构建自己的Centos镜像

1. 构建文件

mkdir /home/dockerfile
vim mydockerfile-centos

FROM centos
MAINTAINER wang<123456789@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "===end==="
CMD /bin/bash

2.构建

docker build -f mydockerfile-centos -t mycentos:0.1  .


3.测试运行

docker images


4.运行

docker run  -it  mycentos:0.1

11.3 构建Tomcat镜像

1.准备工作: tomcat 压缩包 jdk压缩包
vim Dockerfile

FROM centos
MAINTAINER  wang<123456789@qq.com>

COPY  readme.txt  /usr/local/readme.txt

ADD jdk-8ull-linux-x64-tar.gz  /usr/local/
ADD apache-tomcat-9.0.22.tar.gz  /usr/local/

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME  /usr/local/jdk1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME//lib/tools.jar

ENV CATALINA_HOME  /usr/local/apache-tomcat-9.0.22/
ENV CATALINA_BASE   /usr/local/apache-tomcat-9.0.22/
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

RUN yum -y install vim

EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh  && tail -F  /usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out

2.构建镜像

docker build -t mytomcat01  .

3.启动

docker run -d -p  8081:8080 --name mytomcat01  \
-v  /home/wang/build/tomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test  \
-v /home/wang/build/tomcat/logs/:/usr/local/apache-tomcat-9.0.22/logs

4.发布项目
卷挂载,在本机进行操作就可以了。

十二、发布镜像到DockerHub

12.1 注册账号

https://hub.docker.com/

12.2 登录

12.3 提交镜像

docker imagesdocker  push  wyn365/mytomcat01:1.0

十三、发布到阿里云镜像服务中

13.1 登录阿里云控制台

13.2 找到镜像服务

13.3 创建命名空间

13.4 创建镜像仓库


13.5 推送

1. 登录阿里云Docker Registry

$ sudo docker login --username=算法算法算法 registry.cn-hangzhou.aliyuncs.com

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在访问凭证页面修改凭证密码。

2. 从Registry中拉取镜像

$ sudo docker pull registry.cn-hangzhou.aliyuncs.com/wyn-365/mydocker:[镜像版本号]

3. 将镜像推送到Registry

$ sudo docker login --username=算法算法算法 registry.cn-hangzhou.aliyuncs.com$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/wyn-365/mydocker:[镜像版本号]
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/wyn-365/mydocker:[镜像版本号]

请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

4. 选择合适的镜像仓库地址
从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。

如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登录,并作为镜像命名空间前缀。
5. 示例
使用"docker tag"命令重命名镜像,并将它通过专有网络地址推送至Registry。

$ sudo docker imagesREPOSITORY                                                         TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
registry.aliyuncs.com/acs/agent                                    0.7-dfb6816         37bb9c63c8b2        7 days ago          37.89 MB
$ sudo docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816

使用"docker images"命令找到镜像,将该镜像名称中的域名部分变更为Registry专有网络地址。

$ sudo docker push registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: