为什么要用docker
出现问题
应用的开发部署遇到以下问题
- 软件环境安装设置
环境的配置非常繁琐,不管是开发环境,测试环境,还是部署环境,需要的安装设置的软件有很多,各个软件又有版本的限制,以及对其他软件的依赖。
这些东西手动安装起来非常麻烦,且易出错。 - 环境共存
由于各个软件所依赖的其他软件的版本可能会导致冲突,无法在同一环境下按照。 - 环境复制迁移
环境的安装已经如此麻烦,从另外一个系统上安装同一环境将变的非常困难.
解决方案
- 虚拟机
- 资源占用多
- 冗余步骤多
- 启动慢
- 容器
- 启动快
- 资源占用少
- 体积小
Docker的安装
参照官网文档,https://docs.docker.com/install/
基本使用
版本查看
1 | docker version |
几种常见docker的启动
创建网络
1 | docker network create -d bridge some-network |
Mysql
启动
1
docker run --name=some-mysql --network=some-network --restart=always -d -v "$PWD/mysql/conf":/etc/mysql/conf.d -v "$PWD/mysql/data":/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:8.0.17
链接
1
docker run --rm --network=some-network -it mysql mysql -hsome-mysql -uexample-user -p
备份
1
docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql
恢复
1
docker exec -i some-mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /some/path/on/your/host/all-databases.sql
Nginx
1 | docker run --name=some-nginx --network=some-network --restart=always -d -p 80:80 -p 443:443 -v "$PWD/nginx/conf/default.conf":/etc/nginx/conf.d/default.conf nginx:alpine |
Mongo
启动
1
docker run --name=some-mongo --network=some-network --restart=always -d -p 27017:27017 -v /root/workspace/mongo/data:/data/db mongo
备份恢复
1
docker run --rm -v "$PWD/copy.sh":/copy.sh mongo bash copy.sh
copy.sh
1
2mongodump --host 192.168.1.10 --archive=/var/dbname.gz --gzip --db dbname
mongorestore --host 192.168.1.15 --drop --archive=/var/dbname.gz --gzip
192.168.1.10要备份的mongo所在服务器IP,192.168.1.15要恢复的mongo所在服务器IP。
Java
创建一个gradle cache的volume
1
docker volume create gradle-cache
执行一个project的gradle
1
2
3
4
5
6
7docker run --rm \
-v gradle-cache:/home/gradle/.gradle \
-v "$PWD"/master:/home/gradle/master \
-v "$PWD"/somme-project:/home/gradle/somme-project \
-w /home/gradle/somme-project \
gradle:5.5.1-jdk8 \
gradle :somme-project:clean :somme-project:bootJar --console=plain创建一个maven cache的volume
1
docker volume create mvn-cache
执行一个project的maven
1
2
3
4
5
6docker run --rm \
-v maven-repo:/root/.m2 \
-v "$PWD"/somme-project:/usr/src/somme-project \
-w /usr/src/somme-project \
maven:3.6.1-jdk-8 \
mvn clean package启动一个spring boot的project
1
2
3docker build -f ./Dockerfile.dev -t category/some-project .
docker stop some-project || true
docker run -p 8082:8082 --rm --name some-project --network saas-nw -d saas/some-projectDockerfile.dev1
2
3
4
5FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY build/libs/*.jar app.jar
ENTRYPOINT ["java","-jar","-Dspring.profiles.active=prd","/app.jar"]
EXPOSE 8082