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. NPM 错误、问题等汇总

    一. npm的作用就是对Node.js依赖的包进行管理,也可以理解为用来安装/卸载Node.js需要装的东西 二. 1. 修改npm配置为淘宝的源下载: npm install -g cnpm --r ...

  2. JAVA8学习——Stream底层的实现四(学习过程)

    Stream的深入(四) 从更高角度去看一下:类与类之间的设计关系 (借助IDEA的图形处理工具 Ctrl+Alt+U). ReferencePipeline的三个实现的子类: Head Statel ...

  3. kali linux安装nessus

    详细介绍在 Kali 中安装 Nessus 的详细过程步骤以及插件下载失败解决方法. 实验环境 安装过程 下载 Nessus 安装 Nessus 启动 Nessus 获取激活码 登陆 web 界面 N ...

  4. [题解]BZOJ1004 序列函数

    原题找不到了,应该是usaco之类的题目吧.给一个可以交题的链接:http://www.cqoi.net:2012/problem.php?id=1004 思路:将素数一个一个往里乘,保证扫描的顺序是 ...

  5. 获明略科技B+轮战略投资,思迈特软件Smartbi用强产品思维推动BI生态完善

    今天,商业智能BI和大数据分析产品提供商思迈特软件(Smartbi)宣布完成亿级B+轮战略融资,本轮投资方为领先的全球企业级数据分析和组织智能服务平台提供商--明略科技. 此前,思迈特软件曾先后获得来 ...

  6. 今儿直白的用盖房子为例,给你讲讲Java建造者模式

    摘要:建造者模式(Builder Pattern)又叫生成器模式,是一种对象构建模式.它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象. 本 ...

  7. C#CancellationToken/CancellationTokenSource-取消令牌/取消令牌源 CT/CTS

    详细情况:https://www.cnblogs.com/wucy/p/15128365.html 背景 为什么引入取消令牌? Thread.abort()方法会破坏同步锁中代码的原子逻辑,破坏锁的作 ...

  8. 《Java编程思想》学习笔记(详细)

    目录 01 对象导论 02 一切都是对象 03 操作符 04 控制执行流程 05 初始化与清理 06 访问权限控制 07 复用类(继承) 08 多态 09 接口 10 内部类 11 持有对象 12 通 ...

  9. 『无为则无心』Python日志 — 66、将日志信息保存到文件中

    目录 1.把日志信息保存到文件中 2.拓展 (1)观察代码 (2)提出问题 (3)问题说明 1.把日志信息保存到文件中 代码如下所示: """ logging模块是Pyt ...

  10. Pandas:各种错误

    1.输出为CSV文件时,Permission denied 原因可能是: (1).构建DataFrame时没有写index参数 (2).用Dict构建最开始的数据时,value没有写成List的形式, ...