1、docker是什么

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。【百度百科】

2、docker怎么安装

2.1、在线安装

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

或者
curl -sSL https://get.daocloud.io/docker | sh

2.2、离线安装

先选择合适的安装包,下载地址是:

https://download.docker.com/linux/static/stable/x86_64/

然后按以下操作进行

tar xzf docker-20.10.9.tgz

cp docker/* /usr/bin/

cp docker.service /etc/systemd/system/

赋执行权限

chmod +x /etc/systemd/system/docker.service

systemctl daemon-reload

#开机启动

systemctl enable docker.service

启动docker

systemctl start docker

2.3、检查

Docker -v

显示如下信息则正常

Docker version 20.10.9, build c2ea9bc

3、docker 安装redis

3.1、在线安装

从镜像仓库获取需要安装的版本,网址是:

https://hub.docker.com/

默认可以用docker pull redis直接拉镜像,拉取的版本是默认latest,同docker pull redis:latest,也可以选择具体的版本,比如现在redis的稳定版本是6.2.6,那么就可以用docker pull redis:6.2.6-alpine

用docker images -a展示所有已拉取镜像

镜像正常展示,则说明镜像拉取成功。

3.2、启动redis

3.2.1、先写语句

docker run --name redis -p 6389:6379 \

-v /mnt/tools/redis/redis.conf:/etc/redis/redis.conf \

-v /mnt/tools/redis/data:/data \

-d 2cb539a9d29e \

redis-server /etc/redis/redis.conf \

--appendonly yes

3.2.2解释:

docker run   docker启动容器命令

-- name redis 给启动的容器自定义一个名字 可以随意自定义

-p 6389:6379 将容器6379端口映射到宿主机服务器的6399上

-v /mnt/tools/redis/redis.conf:/etc/redis/redis.conf 将宿主机目录上的文件或者文件夹映射到容器指定路径上,两者是复制关系,这样就可以修改宿主机相应文件夹下的文件,docker会自动同步到容器中去,同理,容器中日志等信息会自动同步到宿主机上。

-d 2cb539a9d29e 拉取的镜像id,可以通过上一步获取。

redis-server /etc/redis/redis.conf  指定redis的启动方式,也可以不指定

appendonly yes   开启redis持久化

3.2.3 注意事项:

按各服务器要求,修改redis.conf,修改端口(其实没必要修改端口,因为每次从镜像中启动一个容器,6379肯定不会被占用),修改密码,修改bind(bind不能指定127.0.0.1,如果指定127.0.0.1则表明只能容器内用,宿主机用不了,所以需要bind宿主机内网ip)

3.3、运维

3.3.1 先写语句

docker exec -it redis bash   进入容器

docker stop redis                停止容器

docker start redis                启动容器

docker restart redis             重启容器

docker rm redis                   删除容器

rocker rmi 2cb539a9d29e     删除redis镜像

3.3.2 解释

docker exec -it  固定进入容器语句

redis 启动时自定义的容器名称,或者可以通过docker ps -a 查找相应的容器,获取容器的id: CONTAINER ID

bash  也可以写/bin/bash 固定语句

3.3.3 运维

进入后会发现容器目录结构类似一个新的centos服务器,此时 用redis-cli 命令就可以进入,之后的操作跟centos操作相同

4、打离线安装镜像,用于离线安装

4.1 将运行中的容器打成镜像

docker commit 37e6c9bd2cdf redis-6.2.6

解释

docker commit     固定语句

37e6c9bd2cdf        通过docker ps -a 查找相应的容器,获取容器的id

redis-6.2.6            镜像名称,可以自定义,最好带版本号,因为打出的镜像默认是latest版本的

4.2 将镜像打成文件,进行存储

docker save redis-6.2.6 >/mnt/ redis-6.2.6.tar

解释:

docker save 固定语句

redis-6.2.6     4.1步骤中保存的镜像名

>/mnt/ redis-6.2.6.tar   输出到mnt下redis-6.2.6.tar 文件中

5、离线安装

docker load </mnt/ redis-6.2.6.tar

6、注意事项

docker 默认启动时间是0时区,所以启动时需要在启动文件中添加 -e TZ=Asia/Shanghai,也可以第一次设置后,将设置好启动的容器按照3.4、3.5步骤封装自己的镜像。

4、docker 安装nginx

4.1 在线安装

步骤同3.1

4.2 启动nginx

4.2.1先写语句

docker run --name nginx -p 80:80\

-v /mnt/tools/nginx/nginx.conf:/etc/nginx/nginx.conf \

-v /mnt/tools/nginx/logs:/var/log/nginx \

-v /mnt/workspace/PFMresource:/workspace/PFMresource \

-v /mnt/workspace/Wecredo-PFM-SD-UI:/workspace/Wecredo-PFM-SD-UI \

-v /mnt/workspace/Wecredo-PFM-UI-MH-BAODING:/workspace/Wecredo-PFM-UI-MH-BAODING \

-d b65fb7f3a43a

4.2.2 解释

其他同3.2.2,特别注意以下

-v /mnt/workspace/PFMresource:/workspace/PFMresource \

-v /mnt/workspace/Wecredo-PFM-SD-UI:/workspace/Wecredo-PFM-SD-UI \

-v /mnt/workspace/Wecredo-PFM-UI-MH-BAODING:/workspace/Wecredo-PFM-UI-MH-BAODING \

Nginx请求的地址都是本地地址,所以需要将宿主机的目录映射到容器内,让容器可以请求到

4.3 运维

同3.3

4.4 注释事项

同注意时区问题

5、docker 安装mysql

5.1 在线安装

步骤同3.1

5.2 启动mysql

5.2.1先写语句

docker run -p 3306:3306 --name mysql \

-v /mnt/tools/mysql/logs:/var/log/mysql \

-v /mnt/tools/mysql/data:/var/lib/mysql \

-e MYSQL_ROOT_PASSWORD=@wecredo2022 \

-d a3b66c794c2a

5.2.2 解释

其他同3.2.2,特别注意以下:-e MYSQL_ROOT_PASSWORD=@wecredo2022,设置root密码

5.3 运维

同3.3

初始创建数据库时需要将数据库文件docker cp到容器内,然后容器内登录mysql后source /stanfard.sql

5.4 注释事项

因为容器中没有编辑器,所以要么安装,要么将容器文件复制到本机进行修改,然后复制回去,复制语句docker cp mysqld.cnf mysql:/etc/mysql/mysql.conf.d/mysqld.cnf,

综合以下问题,结论是最好搭建自己的镜像。

特别提醒,同一mysql镜像启动容器时,宿主机数据目录不能相同,会互相冲突。

特别提醒,如果删除容器,而不主动删除宿主机数据文件,那么重新生成容器并指定该宿主机文件时,会自动把前一个容器的数据同步到新容器中。

5.4.1 时区不对

 可以在启动项里面加入-e TZ="Asia/Shanghai"

5.4.2 大小写敏感

 可以在容器中/etc/mysql/mysql.conf.d/mysqld.cnf中添加 lower_case_table_names=1

5.4.3 中文乱码

 可以在容器中/etc/mysql/mysql.conf.d/mysqld.cnf中添加

[mysqld]

character-set-server=utf8

character_set_server=utf8

init_connect=’SET NAMES utf8’

[mysql]

default-character-set = utf8

[mysql.server]

default-character-set = utf8

[mysqld_safe]

default-character-set = utf8

[client]

default-character-set = utf8

5.4.4控制台不能输入中文

可以在启动项中添加 -e LANG=C.UTF-8

5.4.5 this is incompatible with sql_mode = only_full_group_by问题

可以在容器中/etc/mysql/mysql.conf.d/mysqld.cnf中添加

[mysqld]

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

5.4.6 /etc/mysql/mysql.conf.d/mysqld.cnf完整内容如下

[mysqld]

pid-file    = /var/run/mysqld/mysqld.pid

socket        = /var/run/mysqld/mysqld.sock

datadir        = /var/lib/mysql

symbolic-links=0

character-set-server=utf8

lower_case_table_names=1

character_set_server=utf8

init_connect=’SET NAMES utf8’

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

[mysql]

default-character-set = utf8

[mysql.server]

default-character-set = utf8

[mysqld_safe]

default-character-set = utf8

[client]

default-character-set = utf8

6、docker 安装tomcat

6.1 在线安装

步骤同3.1

6.2 启动tomcat

6.2.1先写语句

docker run --name tomcat -p 8081:8080 \

-v /mnt/workspace/logs/:/usr/local/logs/ \

-v /mnt/workspace/tomcat-mh/logs/:/usr/local/tomcat/logs/ \

-v /mnt/workspace/tomcat-mh/war/Wecredo-PFM-SD:/usr/local/tomcat/webapps/Wecredo-PFM-SD \

-v /mnt/workspace/tomcat-mh/conf/server.xml:/usr/local/tomcat/conf/server.xml \

-v /mnt/workspace/PFMresource:/workspace/PFMresource \

-d 693c8f78d52a /usr/local/tomcat/bin/startup.sh

6.2.2 解释

其他同3.2.2,特别注意以下

/usr/local/tomcat/bin/startup.sh 指定tomcat启动方式,如果不指定会以默认方式启动,不会输出catalina.out文件

6.3 运维

同3.3

6.4 注释事项

综合以下原因,建议打出适用于自己的镜像

6.4.1 上传文件权限问题

catalina.sh 修改  UMASK="0002"   设置tomcat上传文件权限

建议将容器中的catalina.sh docker cp到本地,修改后重新cp回去,然后docker restart tomcat,或者启动时-v 指定catalina.sh 映射文件

6.4.2 时区问题

-e TZ="Asia/Shanghai"

6.4.3 startup.sh启动启动报错

catalina.sh 修改   "$CATALINA_OUT" 2>&1 "&"  修改为 "$CATALINA_OUT" 2>&1  一共两处,用于startup.sh启动

建议将容器中的catalina.sh docker cp到本地,修改后重新cp回去,然后docker restart tomcat,或者启动时-v 指定catalina.sh 映射文件

7、docker-compose

7.1先安装docker,然后安装docker-compose

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /mnt/docker-compose

赋权

chmod +x /mnt/docker-compose

7.2检查

./docker-compose –version

7.3 在 jar 包所在路径创建 Dockerfile 文件,添加以下内容

FROM java:8

VOLUME /tmp

ADD demo-0.0.1-SNAPSHOT.jar app.jar

RUN bash -c 'touch /app.jar'

EXPOSE 9000

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]

此文件指定了jdk版本是8 指定了将jar包命名为app.jar 并指明了启动方式

7.4 构建docker-compose.yml文件

version: '2'     # 表示该 Docker-Compose 文件使用的是 Version 2 file  2和3是有语法区别的

services:

nginx:

image: nginx:1.16.1

ports:

- 80:80

- 443:443

privileged: true

restart: always

volumes:

- /mnt/tools/nginx/conf/nginx.conf:/etc/nginx/nginx.conf

- /mnt/tools/nginx/conf/keys:/etc/nginx/keys

- /mnt/tools/nginx/conf/conf.d:/etc/nginx/conf.d

- /mnt/tools/nginx/www:/usr/share/nginx/html

- /mnt/tools/nginx/logs:/var/log/nginx

redis:

image: redis:5.0

privileged: true

restart: always

ports:

- 6379:6379

volumes:

- /mnt/tools/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf

- /mnt/tools/redis/data:/data

command:

# 以配置文件的方式启动 redis.conf

redis-server /usr/local/etc/redis/redis.conf

demo:                      # 指定服务名称

build: .                  # 指定 Dockerfile 所在路径,如果就在当前路径下则可以为空

restart: always

ports:                    # 指定端口映射

- 8080:8080

depends_on:         # 指定依赖服务

- nginx

- redis

7.5 启动

/mnt/docker/docker-compose up

7.6运维

可以用docker stop等命令运维

也可以用

./docker-compose ps -a   查看容器

./docker-compose kill demo 干掉某个容器

等等

8写在最后

因为用到了,所以才去捋,docker-compose确实不怎么用,所以没有过多的研究,欢迎补充完善。

docker专题 从入门到放弃的更多相关文章

  1. Docker Swarm 从入门到放弃

    准备工作 我本机是macOS,所以我直接安装了docker desktop,其中包含了docker-machine,不用单独安装. 安装docker主机驱动 我在网上很多人提到了使用virtualbo ...

  2. 《区块链:从入门到放弃》之obc安装步骤

    obc安装步骤 朋友们可能会好奇,厨师不研究菜谱怎么改研究兵法了,哈哈,我原本是app出身,最近被安排去预研区块链和比特币技术,2个月下来,颇有斩获.期间得到IBM的CC同学指导我一步一步安装obc的 ...

  3. docker专题(2):docker常用管理命令(上)

    http://segmentfault.com/a/1190000000751601 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备 ...

  4. NetCore实践篇:分布式监控客户端ZipkinTracer从入门到放弃之路

    前言 本文紧接上篇.Net架构篇:思考如何设计一款实用的分布式监控系统?,上篇仅仅是个思考篇,跟本文没有太大的关系.但有思考,结合现有的开源组件,实践起来更易理解起来,所以看本文之前,应该先看下上篇博 ...

  5. 物联网架构成长之路(43)-k8s从入门到放弃

    0. 前言 这段时间要入门一下CI/CD了,以前简单的了解过Jenkins,现在要把以下的这个图的架构搭建起来.国外可能一两个命令就安装完成的事情,我折腾了2天多,真的差点放弃了. 1. 安装Virt ...

  6. K8S 从入门到放弃系列文章目录(Kubernetes 1.14)

    1)软件环境 软件 版本 系统 Centos7.5 Kubernetes 1.14.1 Docker 18.09 Calico 3.6 Etcd 3.3.12 2)部署过程简单概要 三台master节 ...

  7. 小白学 Python 爬虫(28):自动化测试框架 Selenium 从入门到放弃(下)

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  8. elasticsearch入门到放弃之elasticsearch-head

    elasticsearch-head可理解为跟DBeaver一样是一个数据可视化工具,但是这个工具并没有理想中那么好用坑也是很多,我已经在我的github上fork了一份修改后的版本:https:// ...

  9. CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维

    前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...

随机推荐

  1. k8s-cka考试题库

    本次测试的所有问题都必须在指定的cluster配置环境中完成.为尽量减少切换,系统已对问题进行分组,同一cluster内的所有问题将连续显示. 开启TAB补全 做题前先配置k8s自动补齐功能,否则无法 ...

  2. vivo全球商城全球化演进之路——多语言解决方案

    一.背景 随着经济全球化的深入,许多中国品牌纷纷开始在海外市场开疆扩土.实现全球化意味着你的产品或者应用需要能够在全球各地的语言环境使用,我们在进行海外业务的推进时,需要面对的最大挑战就是多语言问题. ...

  3. BI报表系统该如何集成到其他系统呢?

    近期小麦我经常收到很多用户的反馈,想知道Smartbi的报表能不能从微信/钉钉之类的直接跳转到已做好的报表页面?他们都希望通过这种方式尽可能地避免由于各个管理软件账号密码不同而造成的不便,能够在日常工 ...

  4. golang线程安全

    目录 1.golang的map是线程安全的吗?怎么安全使用map 2.线程独享什么,共享什么 3.进程状态转换 4.Log包线程安全吗? 5.写的循环队列是不是线程安全? 6.go协程线程安全吗 7. ...

  5. 《Symfony 5全面开发》教程03、使用Controller创建第一个页面

    我们使用Phpstorm打开我们的项目目录,展开项目目录文件夹. Symfony项目其实也是composer项目,如果你新拿到一个Symfony项目, 你可以在控制台中使用composer insta ...

  6. kibana实现条件查询和修改

    GET jyb_report_index_preprod/_search { "query": { "match": { "report_id&quo ...

  7. (第一章第四部分)TensorFlow框架之张量

    系列博客链接: (一)TensorFlow框架介绍:https://www.cnblogs.com/kongweisi/p/11038395.html (二)TensorFlow框架之图与Tensor ...

  8. 【Azure API 管理】使用APIM进行XML内容读取时遇见的诡异错误 Expression evaluation failed. Object reference not set to an instance of an object.

    问题描述 使用APIM,在 Inbound 中对请求的Body内容进行解析.客户端请求所传递的Request Body为XML格式,需要从Request Body中解析出多个(Element)节点值, ...

  9. git flow 工作流程以及常用命令

    一.分支介绍 master 也是产品分支,只有一个,一般情况下不会在这个分支上进行代码操作 develop 只有一个,新特性的开发是基于 develop 开发的,但是不能直接在 develop 上进行 ...

  10. 【VR游戏】封神榜传

    领悟导入SteamVR和VRTK,SteamVR要和CameraRig位置保持一致.1.可以创建多个scene,然后进行连接跳转.但是创建好之后要自己重新导回scene附:删除MainCamera,添 ...