Docker-compose单机容器编排
docker-compose 单机容器编排
Dockerfile:先配置好文件,然后build,镜像-------->容器
docker-compose 既可以基于dockerfile,也可以基于镜像,一键式拉起镜像和容器
docker-compose 核心就是yml文件,可以定义容器的一切。通过yml配置直接运行容器
docker:主要服务于单节点。docker没有统一对外提供服务的端口和配置。docker一般都是内部访问。无需使用https。
如果要对外以集群和分布式的方式提供统一访问的端口,k8s+ingress
docker-compose常用命令
build:构建服务
ps:列出由docker-compose编排出来的容器
up:创建和启动容器
top:显示容器的进程
logs:查看容器的输出日志
down:删除容器,网络。数据卷
exec:在容器中执行命令
stop/start/restart:停止,启动,重启容器
scale:指定启动的容器数量(副本) ?k8s中用的比较多,docker用的少,一般来说不用
docker-compose -f docker-compose.yml up -d
docker-compose:命令的开头,使用docker-compose进行容器编排
-f:使用特定的compose的模版文件,一般都用docker-compose.yml
-p: project-name:指定项目名称,如果不加,会使用目录名称
-d:后台运行
基于docker-compose部署LNMP
配置nginx的dockerfile
mkdir lnmp
 cd lnmp
 mkdir nginx mysql php
 ?
 vim /opt/lnmp/nginx/Dockerfile
 FROM centos:7
 RUN yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
 ADD nginx-1.22.0.tar.gz /usr/local/src/
 RUN useradd -M -s /sbin/nologin nginx
 WORKDIR /usr/local/src/nginx-1.22.0
 RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module && make -j 4 && make install
 ENV PATH /usr/local/nginx/sbin:$PATH
 COPY nginx.conf /usr/local/nginx/conf/
 ADD wordpress-6.4.2-zh_CN.tar.gz /usr/local/nginx/html
 RUN chmod -R 777 /usr/local/nginx/html
 EXPOSE 80
 VOLUME ["/usr/local/nginx/html/"]
 CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
配置mysql的dockerfile
vim /opt/lnmp/mysql/Dockerfile
 FROM centos:7
 RUN yum -y install ncurses ncurses-devel bison cmake pcre-devel zlib-devel gcc gcc-c++ make && useradd -M -s /sbin/nologin mysql
 ADD mysql-boost-5.7.20.tar.gz /usr/local/src
 WORKDIR /usr/local/src/mysql-5.7.20/
 RUN cmake \
 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
 -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
 -DSYSCONFDIR=/etc \
 -DSYSTEMD_PID_DIR=/usr/local/mysql \
 -DDEFAULT_CHARSET=utf8 ?\
 -DDEFAULT_COLLATION=utf8_general_ci \
 -DWITH_EXTRA_CHARSETS=all \
 -DWITH_INNOBASE_STORAGE_ENGINE=1 \
 -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
 -DMYSQL_DATADIR=/usr/local/mysql/data \
 -DWITH_BOOST=boost \
 -DWITH_SYSTEMD=1 && make -j 4 && make install
 COPY my.cnf /etc/my.cnf
 EXPOSE 3306
 RUN chown -R mysql:mysql /usr/local/mysql && chown mysql:mysql /etc/my.cnf
 WORKDIR /usr/local/mysql/bin/
 RUN ./mysqld \
 --initialize-insecure \
 --user=mysql \
 --basedir=/usr/local/mysql \
 --datadir=/usr/local/mysql/data && cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ && systemctl enable mysqld
 ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
 VOLUME ["/usr/local/mysql"]
 ENTRYPOINT ["/usr/sbin/init"]
配置php的dockerfile
vim /opt/lnmp/php/Dockerfile
 FROM centos:7
 RUN yum -y install gd \
 libjpeg libjpeg-devel \
 libpng libpng-devel \
 freetype freetype-devel \
 libxml2 libxml2-devel \
 zlib zlib-devel \
 curl curl-devel \
 openssl openssl-devel \
 gcc gcc-c++ make pcre-devel && useradd -M -s /sbin/nologin nginx
 ADD php-7.1.10.tar.bz2 /usr/local/src
 WORKDIR /usr/local/src/php-7.1.10
 RUN ./configure \
 --prefix=/usr/local/php \
 --with-mysql-sock=/usr/local/mysql/mysql.sock \
 --with-mysqli \
 --with-zlib \
 --with-curl \
 --with-gd \
 --with-jpeg-dir \
 --with-png-dir \
 --with-freetype-dir \
 --with-openssl \
 --enable-fpm \
 --enable-mbstring \
 --enable-xml \
 --enable-session \
 --enable-ftp \
 --enable-pdo \
 --enable-tokenizer \
 --enable-zip && make -j 4 && make install
 ENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATH
 COPY php.ini /usr/local/php/lib
 COPY php-fpm.conf /usr/local/php/etc/
 COPY www.conf /usr/local/php/etc/php-fpm.d/
 EXPOSE 9000
 ENTRYPOINT ["/usr/local/php/sbin/php-fpm","-F"]
部署docker-compose.yml
vim docker-compose
 version: '3'
 services:
 ? nginx:
 ? ? hostname: nginx
 ? ? build:
 ? ? ? context: /opt/lnmp/nginx/
 ? ? ? dockerfile: Dockerfile
 ? ? ports:
 ? ? ? - 1314:80
 ? ? container_name: nginx_server
 ? ? networks:
 ? ? ? lnmp:
 ? ? ? ? ipv4_address: 172.111.0.10
 ? ? volumes:
 ? ? ? - "nginx-data:/usr/local/nginx/html"
 #声明挂在卷名称和目录
 ? mysql:
 ? ? hostname: mysql
 ? ? build:
 ? ? ? context: /opt/lnmp/mysql
 ? ? ? dockerfile: Dockerfile
 ? ? ports:
 ? ? ? - 3306:3306
 ? ? container_name: mysql_server
 ? ? networks:
 ? ? ? lnmp:
 ? ? ? ? ipv4_address: 172.111.0.20
 ? ? privileged: true
 #给数据库权限。true:虽然登录容器,显示的是root用户,但是它是一个伪管理员
 #一旦privileged: true,容器内的root用户和宿主机的root用户,拥有一样的权限
 #生产中尽量不给
 ? ? volumes:
 ? ? ? - "mysql-data:/usr/local/mysql/"
 ? php:
 ? ? hostname: php
 ? ? build:
 ? ? ? context: /opt/lnmp/php/
 ? ? ? dockerfile: Dockerfile
 ? ? ports:
 ? ? ? - 9000:9000
 ? ? container_name: php_server
 ? ? networks:
 ? ? ? lnmp:
 ? ? ? ? ipv4_address: 172.111.0.30
 ? ? volumes:
 ? ? ? - "nginx-data:/usr/local/nginx/html/"
 ? ? ? - "mysql-data:/usr/local/mysql/"
 networks:
 ? lnmp:
 ? ? driver: bridge
 ? ? ipam:
 ? ? ? config:
 ? ? ? ? - subnet: 172.111.0.0/16
 volumes:
 ? nginx-data:
 ? mysql-data:
 ?
 docker-compose -f docker-compose.yml up -d
 ?
 创建完成!


总结:
docker-compose:单机容器编排工具,可以实现一键式的拉去镜像和创建容器
Yml文件的格式:
version: '3'
解析代码的版本,声明解释器
Services:
#声明服务,可以有多个services.
networks:
#写在服务配置,赋予容器ip地址
volumes:
nginx nginx-data:/usr/local/nginx
volumes:
nginx-data:
mysql-data:
docker-compose核心就是yml文件,yml就是把docker run的命令写成代码。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!