一.简介

通过docker简单部署一些应用,感受下docker部署的便捷性,包括OS、web、数据库和编程应用。

#已安装docker 版本20.10.24
docker version
#删除所有容器
docker rm -f $(docker ps -aq)
#删除所有镜像
docker rmi -f $(docker images -q)
#docker run nginx 拉取镜像本地没有,默认拉取latest,如nginx:latest,也可指定版本,如nginx:1.19.0
#可使用docker search 镜像名    在镜像仓库中搜索可用的镜像
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

二.OS快速部署

1.busybox 被称为linux的瑞士军刀,包含常用运维命令

#运行容器
docker run -itd --name my-busybox busybox:latest
#进入容器
docker exec -it my-busybox sh
  • 1.
  • 2.
  • 3.
  • 4.

2.alpine 轻量级linux系统,使用其构建的镜像当然也会很轻量

#运行容器
docker run -itd --name my-alpine alpine:latest
#进入容器
docker exec -it my-alpine sh
  • 1.
  • 2.
  • 3.
  • 4.

构建一个jdk环境

#创建目录
mkdir -p /opt/dockerfile/jdk/
cd /opt/dockerfile/jdk/
#创建dockerfile
cat >dockerfile<<'EOF'
FROM alpine:latest
ENV JDK_VERSION 11
RUN apk add --no-cache openjdk$JDK_VERSION
RUN java -version
WORKDIR /app
CMD ["java", "-version"]
EOF
#构建镜像
docker build -t jdk:v11 .
#运行容器
docker run -itd --name my-jdk jdk:v11 sh
#进入容器
docker exec -it my-jdk sh
#版本查看
java -version
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

3.ubuntu 基于debian的linux发行版

#运行容器
docker run -itd --name my-ubuntu ubuntu:latest /bin/bash
#进入容器
docker exec -it my-ubuntu /bin/bash
  • 1.
  • 2.
  • 3.
  • 4.

4.centos 

#运行容器
docker run -itd --name my-centos centos:latest /bin/bash
#进入容器
docker exec -it my-centos /bin/bash
  • 1.
  • 2.
  • 3.
  • 4.

三.web服务快速部署

1.apache(httpd)

直接运行

#运行容器
docker run -itd --name my-httpd -p 80:80 httpd:latest
#测试
curl 127.0.0.1
  • 1.
  • 2.
  • 3.
  • 4.

dockerfile构建

#创建目录
mkdir -p /opt/dockerfile/apache
cd /opt/dockerfile/apache
#测试文件
echo "alibaby007" >>index.html
#创建dockerfile
cat >dockerfile<<'EOF'
FROM httpd:latest
COPY ./index.html /usr/local/apache2/htdocs
EOF
#构建镜像
docker build -t apache .
#运行容器
docker run -itd --name my-httpd -p 80:80 apache
#测试
curl 127.0.0.1
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

2.nginx 

#运行容器
docker run -itd -p 80:80 --name my-nginx nginx:latest
#测试
curl 127.0.0.1
  • 1.
  • 2.
  • 3.
  • 4.

dockerfile构建

#创建目录
mkdir -p /opt/dockerfile/nginx
cd /opt/dockerfile/nginx
#测试文件
echo "alibaby007" >>index.html
#创建dockerfile
cat >dockerfile<<'EOF'
FROM nginx:latest
COPY ./index.html /usr/share/nginx/html/
EOF
#构建镜像
docker build -t nginx .
#运行容器
docker run -itd --name my-nginx -p 80:80 nginx
#测试
curl 127.0.0.1
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

3.tomcat

#运行容器
docker run -itd -p 80:8080 --name my-tomcat tomcat:latest
#进入容器
docker exec -it my-tomcat bash
#添加测试文件,这里没有war包(放到webapps下),所以index.html放到ROOT下
echo alibaby007 > /usr/local/tomcat/webapps/ROOT/index.html
#退出容器
exit
#测试
curl 127.0.0.1
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

dockerfile构建

#创建目录
mkdir -p /opt/dockerfile/tomcat
cd /opt/dockerfile/tomcat
#测试文件
echo "alibaby007" >>index.html
#创建dockerfile
cat >dockerfile<<'EOF'
FROM tomcat:latest
RUN mkdir -p /usr/local/tomcat/webapps/ROOT
COPY ./index.html /usr/local/tomcat/webapps/ROOT
EOF
#构建镜像
docker build -t tomcat .
#运行容器
docker run -itd --name my-tomcat -p 80:8080 tomcat
#测试
curl 127.0.0.1
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

四.数据库

1.mysql

#运行容器
docker run -itd --name my-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:latest
#进入容器
docker exec -it my-mysql bash
#连接测试
mysql -uroot -p123456
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

2.redis

#运行容器 (授权登录)参数redis-server --requirepass 123456
docker run -d --name my-redis -p 6379:6379 redis:latest redis-server --requirepass 123456
#进入容器
docker exec -it my-redis bash
#连接测试
redis-cli
auth 123456
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

3.mongodb

#运行容器
docker run --name my-mongo -d \
  -p 27017:27017 \
  -e MONGO_INITDB_ROOT_USERNAME=admin \
  -e MONGO_INITDB_ROOT_PASSWORD=123456 \
  -e MONGO_INITDB_DATABASE=admin \
  mongo:latest --auth
#进入容器
docker exec -it my-mongo bash
#登录测试
mongosh admin
db.auth('admin','123456')
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

4.postgresql

#运行容器
docker run -itd --name my-pgsql \
-e POSTGRES_USER=root \
-e POSTGRES_PASSWORD=123456  \
-p 5432:5432 \
postgres:latest
#运行容器
docker exec -it my-pgsql bash
#登录测试,输入密码123456
psql -Uroot -W
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

5.oracle

#拉取镜像并打标签
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
docker tag registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g:latest oracle:11g
#运行容器
docker run -itd --name my-oracle \
-e ORACLE_USER=sys \
-e ORACLE_PWD=123456  \
-p 1521:1521 \
oracle:11g
#进入容器
docker exec -it my-oracle bash
#环境变量生效
source ~/.bash_profile
#登录测试
sqlplus / as sysdba
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

五.编程环境

1.jar包构建

#创建目录
mkdir -p /opt/dockerfile/jar/
cd /opt/dockerfile/jar/
#拷贝jar包到当前目录
cp youpath/my-app.jar .
#创建dockerfile,根据应用可改EXPOSE 8080
cat >dockerfile<<'EOF'
FROM openjdk:11
WORKDIR /app
COPY ./my-app.jar /app
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "my-app.jar"]
EOF
#构建镜像
docker build -t my-app .
#运行容器
docker run -itd --name my-running-app my-app
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

2.python

#创建目录
mkdir -p /opt/dockerfile/python/
cd /opt/dockerfile/python/
#拷贝jar包到当前目录
cp youpath/my-app.py .
#创建dockerfile,根据应用可改EXPOSE 8080
cat >dockerfile<<'EOF'
FROM python:3.7
WORKDIR /app
COPY ./my-app.py /app
RUN pip install --no-cache-dir -r requirements.txt
ENTRYPOINT ["python", "my-app.py"]
EOF
#构建镜像
docker build -t my-python-app .
#运行容器
docker run -it --rm --name my-running-python-app python-app
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.