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. Vue2.0源码学习(1) - 数据和模板的渲染(上)

    准备 一.首先去GitHub上把vue源码download下来,传送门:https://github.com/vuejs/vue 二.搭建一个vue-cli跑起来,用于代码调试,不看着代码动起来只看源 ...

  2. JDK中线程中实现同步等待闭环的一种方式

    实际Thread类自带的join方法就实现了线程同步等待,具体可以通过案例实践,如下: 本文的重点不是join,而是另一种设计的同步等待实现,涉及的关键类有:Thread.Runable.Callab ...

  3. Spring扩展之五:Aware接口等

    ApplicationContextAwareProcessor 1.介绍 ApplicationContextAwareProcessor是一个Spring内部工具,它实现了接口BeanPostPr ...

  4. dart系列之:集合使用最佳实践

    目录 简介 使用字面量创建集合 不要使用.length来判断集合是否为空 可遍历对象的遍历 List.from和iterable.toList where和whereType 避免使用cast 总结 ...

  5. CVE-2017-0213漏洞复现

    CVE-2017-0213漏洞形成的原因 类型混淆的漏洞通常可以通过内存损坏的方式来进行利用.然而漏洞发现者在利用时,并未采用内存损坏的方式来进行漏洞利用.按照漏洞发现者的说法,内存损坏的利用方式需要 ...

  6. [杂记]LeTeX中使用tikz画图的一些实例

    出处:http://www.texample.net/tikz/examples/all/ 上述网站中的实例非常丰富,将代码修改一下再编译就能明白是什么意思,故不再赘述.

  7. C语言memcpy()函数和memmove()函数

    C语言memcpy()函数和memmove()函数 关于 memcpy() 函数,请先看链接. memcpy() 函数和 memmove() 函数的函数原型如下: void* memcpy(void ...

  8. vim中的incsearch不好用,没有动态效果,为什么——incsearch is not working

    虽然使用Linux好多年了,使用vim也好多年了,但是使用vim进行search的时候重来也没有想过要添加动态效果,近来突然有了兴致想要添加这个功能,不过发现居然不好用,在百度上找了好长时间居然没有一 ...

  9. Hadoop2.7.2源码编译过程

    目录 准备工作 jar包安装 源码编译 准备工作 CentOS可以联网,验证:ping www.baidu.com 是畅通的 jar 包准备(hadoop 源码.JDK8.maven.ant .pro ...

  10. Python 并发编程(上)

    Python 并发编程 参考文献:https://gitee.com/wupeiqi/python_course 并发编程:提升代码执行的效率.原来需要 10 分钟执行,并发处理后可以加快到 1 分钟 ...