Dockerfile常用指令
Docker Instruction | Description |
---|---|
FROM | 指定基础镜像 |
RUN | 在容器中执行命令 |
CMD | 指定容器启动时,PID为1的进程(作为参数执行ENTRYPOINT,如果使用到) |
ENTRYPOINT | 指定容器启动时,PID为1的进程,如果使用到ENTRYPOINT,将CMD内容看做是参数来执行 |
ADD | 将文件拷贝到容器中(如果是压缩包,则自动解压) |
COPY | 将文件拷贝到容器中(如果是压缩包,不会自动解压) |
WORKDIR | 指定容器的默认工作目录 |
VOLUME | 声明一个持久化卷目录 |
EXPOSE | 声明端口 |
ENV | 指定环境变量 |
LABEL | 给镜像打标签(用来说明镜像的作用) |
MAINTAINER | 镜像管理者标识(用来说明作者详细信息) |
Dockerfile优化
1)优先选择基础镜像 alpine
2)合并RUN清理没有用的文件
3)清理yum缓存
自动化构建wordpress镜像
# 1.创建一个Dockerfile的存放目录
mkdir my_images/wp
#2.编写Dockerfile
vim Dockerfile
#拉镜像
FROM centos:7
#推送php源
COPY php.repo /etc/yum.repos.d/
#推送wp包
ADD wordpress.tgz /usr/share/nginx/html/wordpress/
#换源安装nginx,php,授权站点目录为apache
RUN curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo && \
yum install -y nginx && \
yum -y install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb && \
chown apache.apache -R /usr/share/nginx/html/wordpress/
#nginx配置文件
COPY nginx.conf /etc/nginx/nginx.conf
#推送启动文件
COPY start.sh /
#暴露端口,设置cmd命令(start.sh)
EXPOSE 80/tcp
CMD ["/bin/shell","/start.sh"]
#设置env
ENV $WP_DB=wordpress $WP_USER=wordpress $WP_PASS=wordpress $WP_DB_HOST=localhost
#整合一下
FROM centos:7
COPY php.repo /etc/yum.repos.d/
ADD wordpress.tgz /usr/share/nginx/html/wordpress/
RUN curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo && \
yum install -y nginx && \
yum -y install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb && \
chown apahce.apche -R /usr/share/nginx/html/wordpress/
COPY nginx.conf /etc/nginx/nginx.conf
COPY start.sh /
EXPOSE 80/tcp
CMD ["/bin/shell","/start.sh"]
ENV WP_DB=wordpress \
WP_USER=wordpress \
WP_PASS=wordpress \
WP_DB_HOST=localhost
#创建镜像
docker build -t wp:v1 .
#启动容器后访问,可以看到,直接就访问数据库了
docker run -p 80:80 -d wp:v1
#wordpress和数据库同时启动测试,可以直接创建站点信息,成功
docker run -p 80:80 --link mysql57 -e WP_PASS=123 -e WP_DB_HOST=mysql57 -d wp:v1
docker run \
--name mysql57 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123 \
-e MYSQL_DATABASE=wordpress \
-e MYSQL_USER=wordpress \
-e MYSQL_PASSWORD=123 \
-d mysql:5.7
使用Docker启动gitlab和jenkins
gitlab
#启动gitlab
docker run --detach \
--publish 443:443 --publish 80:80 --publish 2222:22 \
--name gitlab \
--restart always \
--volume /data/gitlab/config:/etc/gitlab \
--volume /data/gitlab/logs:/var/log/gitlab \
--volume /data/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
#获取密码
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
访问:10.0.0.81:8080
jenkins
#启动jenkins
docker run -d --name jks -u root -p 29090:8080 -v /jenkins/scm/jks_home:/var/jenkins_home jenkins/jenkins
#进入容器拿到密码
[root@docker01 ~]# docker exec -it jks /bin/bash
root@95021bb22eed:/# cat /var/jenkins_home/secrets/initialAdminPassword
3f31811d52d445b08b4d72d752f3c2e0
#登录
10.0.0.101:29090