清除cache
echo 1 > /proc/sys/vm/drop_caches
1.安装略
2.docker-compose -v
3.docker-compose pull:拉取镜像
4.docker-compose up -d:容器启动并后台运行
docker logs -f “xxx”
下载nginx(-P可以指定目录)
wget -P ./ http://nginx.org/download/nginx-1.9.7.tar.gz
Dockerfile:
FROM centos
RUN yum -y install gcc make pcre-devel zlib-devel tar zlib
ADD nginx-1.15.2.tar.gz /usr/src/
RUN cd /usr/src/nginx-1.15.2 \
&& mkdir /usr/local/nginx \
&& ./configure --prefix=/usr/local/nginx && make && make install \
&& ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ \
&& nginx
#RUN rm -rf /usr/src/nginx-1.15.2
EXPOSE 80
后台启动容器
–name nginx:容器名称。
-p 80:80: 端口进行映射。
-d nginx: 设置容器在在后台一直运行。
docker run -d -p 80:80 --name nginx nginx:v1
查看状态,但是此时不能访问80接端口
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dde4748b6210 nginx:v1 "/bin/bash" 7 seconds ago Up 5 seconds 0.0.0.0:80->80/tcp nginx
进入容器,启动nginx后可以访问80端口
root@instance-20y0syed:~# docker exec -it nginx bash
[root@dde4748b6210 /]# nginx
[root@dde4748b6210 /]# exit
docker pull nginx:latest
启动容器后会自动启动nginx
docker run -d -p 81:80 --name nginx_81 nginx:latest
创建需要挂载的文件夹
mkdir -p /usr/jrdee/nginx/{conf,logs,static}
编辑nginx.conf
#user root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma|ico)$ {
root /static;
expires 30d;
}
location ~ .*\.(js|css)?$ {
root /static;
expires 1h;
}
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:2727/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
PS:root /static
查找资源在docker容器中绝对位置,与本机路径无关
启动容器并实现挂载
docker run -p 80:80 --name nginx_80 -v $PWD/static:/static -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs -d --privileged=true nginx
PS:这里指定了挂载的位置,如上面的-v $PWD/static:/static,等于是将本机文件夹拷贝到了容器中,后面的nginx.conf同理
直接拉取5.7
docker pull mysql:5.7
创建挂载目录
mkdir -p /usr/jrdee/mysql/{conf.d,data}
vim /usr/jrdee/mysql/my.cnf
my.cnf内容:
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
启动容器
docker run --restart=always --privileged=true -d -v $PWD/data/:/var/lib/mysql -v $PWD/logs:/var/log/mysql -v $PWD/my.cnf:/etc/mysql/my.cnf -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
–privileged=true:容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限
–restart=always:当 Docker 重启时,容器自动启动
使用docker-compose:
version: '0.0.1'
services:
mysql:
environment:
MYSQL_ROOT_PASSWORD: "123456"
image: "mysql:5.7"
restart: always
volumes:
- "$PWD/data/:/var/lib/mysql"
- "$PWD/logs:/var/log/mysql"
- "$PWD/my.cnf:/etc/mysql/my.cnf"
ports:
- "3306:3306"
拉取镜像
docker pull redis
创建文件夹data和文件redis.conf
requirepass health_123
appendonly yes
daemonize no
docker-compose
version: '0.0.1'
services:
redis:
image: redis
restart: always
command: redis-server /etc/redis/redis.conf
volumes:
- "./redis.conf:/etc/redis/redis.conf"
- "./data:/data"
ports:
- 6379:6379
FROM centos
MAINTAINER ld
ADD jdk-8u221-linux-x64.tar /usr/jrdee/tomcat
#将宿主机的tomcat目录下的文件拷至镜像的/usr/tomcat目录下
ADD apache-tomcat-8.5.45.tar /usr/jrdee/tomcat
#设置环境变量
ENV JAVA_HOME=/usr/jrdee/tomcat/jdk1.8.0_221
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH=/sbin:$JAVA_HOME/bin:$PATH
#公开端口
EXPOSE 8080
#设置启动命令
ENTRYPOINT ["/usr/jrdee/tomcat/apache-tomcat-8.5.45/bin/catalina.sh","run"]
tomcat和jdk自己准备
docker run -d -p 8080:8080 -v $PWD/webapps:/usr/jrdee/tomcat/apache-tomcat-8.5.45/webapps -v $PWD/tomcat-users.xml:/usr/jrdee/tomcat/apache-tomcat-8.5.45/conf/tomcat-users.xml -v $PWD/context.xml:/usr/jrdee/tomcat/apache-tomcat-8.5.45/webapps/manager/META-INF/context.xml -v $PWD/logs:/usr/jrdee/tomcat/apache-tomcat-8.5.45/logs --name tomcat --link mysql:tomysql
--link myredis:myredis tomcat:latest
–link:连接其他容器,冒号前面为容器名称,后面为自定义主机名
a.webapps文件夹:资源应用
b.tomcat-users.xml:tomcat-manager用户配置
c.context.xml:配置远程访问manager-ui界面,不然会403
d.logs文件夹:tomcat日志
拉取镜像
docker pull delron/fastdfs
创建tracker和storage文件夹
创建tracker容器
docker run -d --network=host --name tracker -v /usr/jrdee/fastdfs/tracker:/var/fdfs delron/fastdfs tracker
创建storage容器
docker run -d --network=host --name storage -e TRACKER_SERVER=IP:22122 -v /usr/jrdee/fastdfs/storage:/var/fdfs -e GROUP_NAME=group1 delron/fastdfs storage
更改上面的IP,改成自己的IP
进入storage,发现在nginx目录下,默认端口8888
JAVA
pom
com.github.tobato
fastdfs-client
1.26.5
application.yml
fdfs:
so-timeout: 1501
connect-timeout: 601
thumb-image: #缩略图生成参数
width: 200
height: 200
tracker-list: #TrackerList参数,支持多个
- IP:22122
工具类
@Component
public class FastdfsClientUtil {
@Autowired
private FastFileStorageClient storageClient;
@Autowired
private ThumbImageConfig thumbImageConfig;
private Set createMetaData() {
Set metaDataSet = new HashSet();
metaDataSet.add(new MetaData("Author", "tobato"));
metaDataSet.add(new MetaData("CreateDate", "2016-01-05"));
return metaDataSet;
}
// 上传文件
public String upload(MultipartFile myfile) throws Exception {
// 文件名
String originalFilename = myfile.getOriginalFilename()
.substring(myfile.getOriginalFilename().lastIndexOf(".") + 1);
// 文件扩展名
String ext = originalFilename.substring(originalFilename.lastIndexOf(".") + 1, originalFilename.length());
StorePath storePath;
if (ext.endsWith(".jpg") || ext.endsWith(".png")) {
storePath = this.storageClient.uploadImageAndCrtThumbImage(myfile.getInputStream(), myfile.getSize(),
originalFilename, null);
}else {
FastFile fastFile = new FastFile(myfile.getInputStream(), myfile.getSize(),
originalFilename, createMetaData());
storePath = this.storageClient.uploadFile(fastFile);
}
String path = storePath.getFullPath();
return path;
}
/**
* 删除文件
*
* @Param fileUrl 文件访问地址
*/
public void deleteFile(String fileUrl) {
if (StringUtils.isEmpty(fileUrl)) {
return;
}
try {
StorePath storePath = StorePath.parseFromUrl(fileUrl);
storageClient.deleteFile(storePath.getGroup(), storePath.getPath());
} catch (FdfsUnsupportStorePathException e) {
}
}
}
默认端口8888,进行查看图片或者下载文件