新闻  |   论坛  |   博客  |   在线研讨会
实用干货分享(2) - Docker使用操作指南
中电金信人 | 2022-06-05 23:56:35    阅读:217   发布文章

实用干货分享(2) - Docker使用操作指南


一、Docker安装部署


1. 安装仓库


执行以下命令,安装Docker所需的包。其中yum-utils提供yum-config-manager工具;
device-mapper-persistent-data及lvm2则是devicemapper存储驱动所需的包。

sudo yum install -y yum-utils device-mapper-persistent-data lvm2


执行如下命令,安装stable仓库。必须安装stable仓库,即使你想安装edge或test仓库中的Docker构建版本。

sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo


[可选]执行如下命令,启用edge及test仓库。edge/test仓库其实也包含在了docker.repo 文件中,但默认是禁用的,可使用以下命令来启用。

sudo yum-config-manager --enable docker-ce-edge # 启用edge仓库
sudo yum-config-manager --enable docker-ce-test # 启用test仓库


如需再次禁用,可加上--disable 标签。例如:执行如下命令即可禁用edge仓库。

sudo yum-config-manager --disable docker-ce-edge


2. 安装Docker CE


执行以下命令,更新yum的包索引

sudo yum makecache fast


执行如下命令即可安装最新版本的Docker CE

sudo yum install docker-ce


在生产环境中,可能需要指定想要安装的版本,此时可使用如下命令列出当前可用的Docker版本。

yum list docker-ce.x86_64 --showduplicates | sort -r


可使用如下命令,安装想要安装的Docker CE版本。

sudo yum install docker-ce-


启动Docker

Sudo systemctl start docker


这样,Docker将会下载测试镜像,并使用该镜像启动一个容器。如果能够看到类似如下的输出,则说明安装成功。(时间较长)

实用干货分享(2) - Docker使用操作指南


二、Docker操作的基本命令


启动Docker:sudo systemctl start docker


Docker镜像导入:docker load < 镜像包名(一般格式为tar.gz)


Docker镜像导出:docker save 镜像名 > 镜像所要打成的包名(一般格式为tar.gz)


Docker镜像查看:docker images

实用干货分享(2) - Docker使用操作指南


查看已经启动的Docker容器:docker ps

实用干货分享(2) - Docker使用操作指南


查看所有Docker容器:docker ps -a

实用干货分享(2) - Docker使用操作指南


下载Docker镜像: docker pull 镜像名称(可以到镜像仓库查询)


创建镜像:docker build -t 镜像名称(自定):版本号(自定) . 执行此命令前必须先写好Dockerfile文件,创建镜像命令要在Dockerfile所在目录执行,不要忘记版本号后加空格和点。


停止Docker容器:docker stop 容器名(或容器id)


删除Docker容器:docker rm 容器名(或容器id)


删除Docker镜像:docker rmi 容镜像名:版本号(或镜像id)


进入Docker容器:sudo docker exec -it 容器名 bash

实用干货分享(2) - Docker使用操作指南


查看Docker容器的地址:docker inspect 容器名(或容器id)

实用干货分享(2) - Docker使用操作指南


向Docker容器中拷贝文件:docker cp 文件名 容器id:容器中的目录


启动Docker容器:docker run --name 容器名称(自定)-v 虚拟机目录:容器目录 -e 环境变量参数 -d docker镜像名称:版本号


--name 容器命名

-v 文件挂载

-e 设置环境变量

-d 选择镜像

-p 端口映射


例子:

docker run --name mysql --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7


三、开源Docker镜像下载过程

(以mysql为例)

实用干货分享(2) - Docker使用操作指南


在阿里云镜像仓库找搜索mysql容器进行

实用干货分享(2) - Docker使用操作指南


实用干货分享(2) - Docker使用操作指南


实用干货分享(2) - Docker使用操作指南


查看下载好的镜像

实用干货分享(2) - Docker使用操作指南


启动:

docker run --name mysql --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.20


四、自己打包Docker镜像过程

(以logstash为例)


1. 目录准备

实用干货分享(2) - Docker使用操作指南


准备好logstash的模板文件、jdk1.8的安装包、logstash的配置文件以及logstash的安装包。


2. 修改配置文件

实用干货分享(2) - Docker使用操作指南


kafka的地址和端口要使用宿主机的地址以及在部署kafka容器时做的端口映射的端口(这里使用的就是这种方法)。


还可以使用docker inspect命令查询kafka容器的地址,然后使用kafka容器的地址和kafka匹配的端口。

实用干货分享(2) - Docker使用操作指南


模板文件的地址配置时要使用logstash容器内的地址,要与Dockerfile文件内所规定的目录层级一致(可以自定)。


3. Dockerfile文件编写

实用干货分享(2) - Docker使用操作指南


模板:

FROM centos:latest

MAINTAINER xzp

WORKDIR /usr/local

ADD jdk-8u251-linux-x64.tar.gz /usr/local

ENV JAVA_HOME=/usr/local/jdk1.8.0_251

ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV PATH=$JAVA_HOME/bin:$PATH

ENV LANG C.UTF-8

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

RUN echo 'Asia/Shanghai' >/etc/timezone

WORKDIR /opt/logstash

ADD logstash-6.8.3.tar.gz /opt/logstash

ADD kafka-logstash-es.conf /opt/logstash/logstash-6.8.3/config

ADD es-template.json /opt/logstash/logstash-6.8.3/config

ENTRYPOINT ["/opt/logstash/logstash-6.8.3/bin/logstash", "-f", "/opt/logstash/logstash-6.8.3/config/kafka-logstash-es.conf"]


补充:

实用干货分享(2) - Docker使用操作指南


实用干货分享(2) - Docker使用操作指南


4. 生成镜像

实用干货分享(2) - Docker使用操作指南


实用干货分享(2) - Docker使用操作指南


实用干货分享(2) - Docker使用操作指南


实用干货分享(2) - Docker使用操作指南


5. 启动Docker容器

实用干货分享(2) - Docker使用操作指南


实用干货分享(2) - Docker使用操作指南


五、Docker打包镜像过程中

注意事项


● 在配置一些组件的配置文件时,文件中的ip和端口的配置要依据映射或是容器的ip和端口;

● 在配置文件以及脚本文件时有路径的一律使用镜像中的路径;

● 在要使用启动jar包的命令时,不论是在脚本中还是在Dockerfile中,一律不许使用nohup;

● 在使用docker build -t 进行生产镜像时,必须在Docker同级目录下执行;

● 在使用 docker build -t 时不要忽略最后的空格和点;

● 在生成平台组件的镜像时必须使用自己的jdk;

● 在Dockerfile 执行脚本文件时必须给脚本文件授权;

● docker save和docker load命令必须使用同一套。


六、Docker打包以及部署过程中

遇到的bug

实用干货分享(2) - Docker使用操作指南


解决办法:在Dockerfile文件添加授权命令并重新生产镜像。


添加命令为:RUN chmod -R 777 容器中的绝对路径

实用干货分享(2) - Docker使用操作指南


问题描述:端口映射出现问题

解决办法:使用systemctl restart docker命令重启docker


错误描述:容器启动之后,正常运转一段时间后,重启

解决办法以及解决思路:

①查看配置文件,检查配置项,查看输出的日志;

②如果使用的是容器管理平台,需要查看脚本文件中启动所需要的内存资源,不能分配资源少于脚本中所需的资源;

③将日志文件挂载出来,查看日志文件。


错误描述:数据库表名大小写报错,已经倒库时报错。

实用干货分享(2) - Docker使用操作指南


问题原因:数据库版本问题

解决办法以及解决思路:

①找较新版本的数据库镜像(不建议使用);

②自己打包镜像并在my.cnf中加入以下配置。

#解决时间默认值不兼容的

sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

#设置忽略大小写(简单来说就是sql语句是否严格),默认库名表名保存为小写, 不区分大小写

lower_case_table_names = 1


错误描述:在build镜像时,报错找不到路径

解决办法及解决思路:

①检查build命令后是否存在空格和点(千万不要忘记);

②检查Dockerfile中的路径是否正确;

③检查脚本中的路径是否与Dockerfile中的路径一致,都采用镜像中的路径,且必须为绝对路径。


七、开源组件Docker镜像运行指令


Filebeat启动命令

docker run -d --name=filebeat --user=root --volume="/home/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro" --volume="/var/lib/docker/containers:/var/lib/docker/cintainers:ro" --volume="/var/run/docker.sock:/var/run/docker.sock:ro" elastic/filebeat:6.8.3 filebeat -e -strict.perms=false


Es启动命令

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.8.3


Redis启动命令

docker run -p 6379:6379 --name myredis -v /home/redis/redis.conf:/etc/redis/redis.conf -d redis:5.0.4 redis-server /etc/redis/redis.conf --appendonil yes


Zk启动命令

docker run -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime -d wurstmeister/zookeeper


Kafka的启动命令

ocker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=172.16.0.13:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.16.0.13:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime wurstmeister/kafka


mysql启动命令

docker run --name mysql --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7


八、可参考的容器镜像仓库


国内(阿里):
https://account.aliyun.com/

官方:https://hub.docker.com/


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客