dockerFile构建镜像
CentOS镜像模版
dockerfile-centos
# 依据哪个镜像创建
From centos:7.6.1810
# 指定容器内部使用语言
ENV LANG="en_US.UTF-8"
ENV LC_ALL="en_US.UTF-8"
# 使用亚洲/上海时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 创建工作目录
RUN mkdir -p /data/apps /data/data /data/logs;ln -s /data/apps /apps
# 安装字体
RUN yum install -y epel-release
RUN yum groupinstall -y "fonts"
RUN yum install -y kde-l10n-Chinese
# 安装openssl等依赖包
RUN yum install -y openssl openssl-devel
RUN yum install -y crontabs cronolog ntp
# 安装数据库依赖
RUN yum install -y mariadb-libs
RUN ln -s /usr/lib64/mysql/libmysqlclient.so.18 /usr/lib64/libmysqlclient_r.so.16
RUN yum install -y gcc cmake
RUN yum install -y lrzsz telnet net-tools file bind-utils less
RUN yum install -y jq xml2; yum clean all
RUN yum install -y expat-devel apr-devel ghostscript ghostscript-devel
# 运行容器时的默认命令
CMD ["/bin/bash"]
构建命令:
docker build -f dockerfile-centos -t lagou/centos/7.6/centos .
docker run --rm -it lagou/centos/7.6/centos
JDK镜像模板
dockerfile-jdk
FROM lagou/centos/7.6/centos
ENV JAVA_HOME="/apps/jdk"
ENV PATH=${JAVA_HOME}/bin:$PATH
ADD ./jdk-8u251-linux-x64.tar.gz /apps/
RUN ln -s /apps/jdk1.8.0_251 /apps/jdk
ADD ./UnlimitedJCEPolicyJDK8/US_export_policy.jar /apps/jdk/jre/lib/security/
ADD ./UnlimitedJCEPolicyJDK8/local_policy.jar /apps/jdk/jre/lib/security/
ADD ./msyhbd.ttf /apps/jdk/jre/lib/fonts/
ADD ./msyh.ttf /apps/jdk/jre/lib/fonts/
CMD ["/bin/bash"]
#下载jce_policy-8.zip并解压到当前目录
wget http://pkgs-linux.cvimer.com/jdk/1.8/jce_policy-8.zip
unzip jce_policy-8.zip
#下载jdk-8u251-linux-x64.tar.gz、msyh.ttf、msyhbd.ttf
wget http://pkgs-linux.cvimer.com/jdk/1.8/jdk-8u251-linux-x64.tar.gz
wget http://pkgs-linux.cvimer.com/fonts/msyh.ttf
wget http://pkgs-linux.cvimer.com/fonts/msyhbd.ttf
#构建
docker build -f dockerfile-jdk -t lagou/centos/7.6/jdk/1.8/jdk .
Tomcat镜像模版
dockerfile-tomcat
FROM lagou/centos/7.6/jdk/1.8/jdk
ENV TOMCAT_HOME="/apps/tomcat"
ENV PATH=${TOMCAT_HOME}/bin:$PATH
RUN yum install -y gcc make expat-devel apr-devel; yum clean all ; rm -rf /var/cache/yum/*
ADD ./apr-1.6.5.tar.gz /root/
RUN cd /root/apr-1.6.5 && ./configure && make && make install && rm -rf /root/apr*
ADD ./apr-util-1.6.1.tar.gz /root/
RUN cd /root/apr-util-1.6.1 && ./configure --with-apr=/usr/local/apr && make && make install && rm -rf /root/apr*
ADD ./apache-tomcat-7.0.93.tar.gz /data/apps/
RUN ln -s /apps/apache-tomcat-7.0.93 /apps/tomcat
RUN cd /apps/tomcat/bin; tar xf tomcat-native.tar.gz; cd /apps/tomcat/bin/tomcat-native-1.2.21-src/native && \ ./configure --with-apr=/usr/local/apr && make && make install
CMD ["/bin/bash"]
wget http://pkgs-linux.cvimer.com/apr/1.6.5/apr-1.6.5.tar.gz
wget http://pkgs-linux.cvimer.com/apr/1.6.1/apr-util-1.6.1.tar.gz
wget https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.93/bin/apache-tomcat-7.0.93.tar.gz
docker build -f dockerfile-tomcat -t lagou/centos/7.6/jdk/1.8/tomcat/7.0.9/tomcat .
docker run --rm -it --network host lagou/centos/7.6/jdk/1.8/tomcat/7.0.9/tomcat
#进入Docker
cd apps
cd tomcat/bin
./startup.sh
自定义Hot镜像模板
vi dockerfile-hot
ADD ./hot.jar /apps/
EXPOSE 8080
ENTRYPOINT ["java","-jar","/apps/hot.jar"]
docker build -f dockerfile-hot -t lgedu/hot:1.0 .
docker run --rm -it --network host lgedu/hot:1.0
#进入容器
cd /apps;
java -jar hot.jar
swarm集群
192.168.70.100操作
#拉取镜像
docker pull swarm
docker swarm init --advertise-addr 192.168.70.100
#复制该命令返回的信息在另一台集群执行
docker swarm join-token manager
docker swarm join-token worker
192.168.70.101操作
docker pull swarm
#添加该节点为worker
docker swarm join --token SWMTKN-1-4aglt75ids5dx789m1839bb8hvyvn31u0kf6vylg95ymb57bjg-4jujwq3s53zwxv7swm9bus3nv 192.168.70.100:2377
192.168.70.100操作
docker node ls
安装Docker Compose
curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
-
将可执行权限应用于二进制文件:
chmod +x /usr/local/bin/docker-compose
-
添加到环境中
#ln -s : 软链接 ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
4.测试安装
docker-compose --version
docker-compose.yml
模板文件是使用Compose的核心,默认的模板文件名称为docker-compose.yml,格式为YAML格式。
version: '2.0' #版本2.0
services: #定义服务
nginx: #Nginx容器
image: nginx:1.18.0 #Nginx:latest 镜像 先拉镜像 指定镜像的版本
ports:
- 80:80 #映射端口
- 433:433
volumes: #挂载数据 宿主机目录(一定要存在):容器的目录
- /data/log:/var/log/nginx
- /data/www:/var/www
- /etc/letsencrypt:/etc/letsencrypt
案例
version: "2.0"
services:
nginx:
image: nginx:1.18.0
restart: always
container_name: nginx
environment:
- TZ=Asia/beijing
ports:
- 80:80
- 443:443
volumes:
- /docker/nginx/log:/var/log/nginx
- /docker/nginx/www:/etc/nginx/html
- /etc/letsencrypt:/etc/letsencrypt
mysql:
image: mysql:5.7.30
restart: always
container_name: mysql5.7
ports:
- 13306:3306
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--default-time-zone=+8:00
environment:
MYSQL_ROOT_PASSWORD: "123456"
volumes:
- "/docker/mysql/db:/var/lib/mysql"
redis:
image: redis:5.0.9
container_name: redis
environment:
- TZ=Asia/beijing
ports:
- 6379:6379
volumes:
- /docker/redis/data:/data
运行
docker-compose up -d
与Swarm一起使用Compose
version: "3.0"
deploy:
mode: replicated
replicas: 2
去掉不支持的:
restart: always
container_name: nginx
version: "3.0"
services:
nginx:
image: nginx:1.18.0
environment:
- TZ=Asia/beijing
ports:
- 80:80
- 443:443
volumes:
- /docker/nginx/log:/var/log/nginx
- /docker/nginx/www:/etc/nginx/html
- /etc/letsencrypt:/etc/letsencrypt
deploy:
mode: replicated
replicas: 2
mysql:
image: mysql:5.7.30
ports:
- 13306:3306
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--default-time-zone=+8:00
environment:
MYSQL_ROOT_PASSWORD: "123456"
volumes:
- "/docker/mysql/db:/var/lib/mysql"
deploy:
mode: replicated
replicas: 2
redis:
image: redis:5.0.9
environment:
- TZ=Asia/beijing
ports:
- 6379:6379
volumes:
- /docker/redis/data:/data
deploy:
mode: replicated
replicas: 2