Docker使用全攻略(centos 7)
为什么会选择使用Docker?如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
一、安装最新版docker
更新系统组件
sudo yum update
在/etc/yum.repos.d/下新建文件docker-ce.repo 文件,这里创建国内的一个yum源
sudo vi /etc/yum.repos.d/docker-ce.repo
docker-ce.repo内容:
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
安装docker
sudo yum makecache
sudo yum install docker-ce
二、开启服务和远程API
启动docker服务
sudo systemctl start docker
停止docker服务
sudo systemctl stop docker
开启docker远程api
sudo dockerd -H unix:///var/run/docker.sock -H tcp://192.168.201.129:2375
关闭防火墙
sudo systemctl stop firewalld.service
三、常用操作
仓库中查找镜像(比如查找activeemq)
docker search activemq
拉取仓库中的镜像(比如拉取activeemq)
docker pull docker.io/webcenter/activemq
生成镜像(有空格和点号)
sudo docker build -t dockerfile .
查看镜像
sudo docker images
镜像详情
sudo docker image inspect imageid
删除镜像
sudo docker rmi imageid
查看容器
sudo docker ps -a
启动容器
sudo docker start containerid
进入容器
sudo docker exec -it containerID /bin/bash
查看容器详情(包括ip)
sudo docker inspect containerID
容器中退出
exit
停止容器
sudo docker stop containerid
删除容器
sudo docker rm containerid
四、私有仓库(daocloud加速)
搭建私有仓库的目的是提高拉取公共镜像的速度
1、注册并登录daocloud
2、添加主机
在docker主机上运行图中的安装命令,安装成功后再daocloud集群管理里面可以查看到主机情况
3、启动加速
在docker主机上运行命令开启
service daomonit restart
五、拉取Tomcat部署war包
1、拉取Tomcat镜像
docker pull docker.io/tomcat
2、拉取Tomcat镜像
docker run -p 8081:8080 docker.io/tomcat
若端口被占用,可以指定容器和主机的映射端口 前者是外围访问端口:后者是容器内部端口,我这里防止端口被占用指定的8081端口
开启成功后tomcat服务就可以访问了
3、将test.war上传到docker中的tomcat容器中
docker cp test.war containerid:/usr/local/tomcat/webapps
4、进入容器查看war包是否在tomcat的webapps下(可以不必查看)
sudo docker exec -it containerID /bin/bash
六、拉取nginx镜像,nginx配置启动
1、拉取nginx镜像
拉取
docker pull nginx
查看
docker images nginx
2、宿主机添加相关目录和文件
首先,创建目录 nginx, 用于存放后面的相关东西。
mkdir -p ~/nginx/www ~/nginx/logs ~/nginx/conf
-
~/表示当前目录
-
www: 目录将映射为 nginx 容器配置的虚拟目录。
-
logs: 目录将映射为 nginx 容器的日志目录。
-
conf: 目录里的配置文件将映射为 nginx 容器的配置文件。
进入创建的 nginx 目录,可以存放 Dockerfile 文件
2、运行容器
docker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs -d docker.io/nginx
-
-p 80:80:将容器的80端口映射到主机的80端口
-
–name mynginx:将容器命名为mynginx
-
-v $PWD/www:/www:将主机中当前目录下的www挂载到容器的/www
-
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:将主机中当前目录下的nginx.conf挂载到容器的/etc/nginx/nginx.conf
-
-v $PWD/logs:/wwwlogs:将主机中当前目录下的logs挂载到容器的/wwwlogs
七、拉取mysql镜像,mysql配置启动
1、拉取mysql5.6镜像
拉取
docker pull mysql:5.6
查看
docker images mysql
2、宿主机添加相关目录和文件
首先,创建目录 nginx, 用于存放后面的相关东西。
mkdir -p ~/mysql/data ~/mysql/logs ~/mysql/conf
-
~/表示当前目录
-
data目录将映射为mysql容器配置的数据文件存放路径。
-
logs目录将映射为mysql容器的日志目录
-
conf目录里的配置文件将映射为mysql容器的配置文件
进入创建的 mysql 目录,可以存放 Dockerfile 文件
3、运行容器
docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d docker.io/mysql:5.6
-
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
-
–name mymysql:将容器命名为mymysql
-
-v -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。
-
-v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。
-
–v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql .
-
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
八、安装使用activemq
1、查询Docker镜像
docker search activemq
2、下载Docker镜像
docker pull docker.io/webcenter/activemq
3、创建&运行ActiveMQ容器器
docker run -d --name myactivemq -p 61617:61616 -p 8162:8161 docker.io/webcenter/activemq
- -p 61617:61616 : 将容器的61616端口映射到主机的61617端口(通信端口)
- -p 8162:8161 : 将容器的8161端口映射到主机的8162端口(activemq管理端口)
4、查看WEB管理页面:
浏览器输入http://127.0.0.1:8162/,点击Manage ActiveMQ broker使用默认账号/密码:admin/admin进入查看
九、安装使用redis
1、拉取官方的镜像
docker pull redis
2、创建宿主机配置目录
mkdir -p ~/redis ~/redis/data
3、运行容器
docker run -p 6379:6379 -v $PWD/data:/data -d docker.io/redis redis-server --appendonly yes
- -p 6379:6379 : 将容器的6379端口映射到主机的6379端口
- -v $PWD/data:/data : 将主机中当前目录下的data挂载到容器的/data
十、Docker部署springboot.jar
1、开启docker远程,idea docker插件连接docker
sudo dockerd -H unix:///var/run/docker.sock -H tcp://192.168.201.129:2375
- 192.168.201.129为安装有docker的机器
- 如果使用的是本地安装的Docker可忽略这一步,直接开启本地docker服务就可以了
2、创建Dockerfile文件,配置Docker文件
在springboot项目中main目录下新增docker文件夹并新增Dockerfile文件,文件内容如下:
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD springboot.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
- springboot.jar 是maven打包项目生成的jar包
项目目录结构:
.
├── pom.xml
└── src
└── main
├── docker
│ └── Dockerfile
├── java
│ └── com
│ └── docker
│ └── Application.java
└── resources
└── application.properties
3、项目pom.xml引入docker打包插件,以及相关配置,并进行打包
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.3</version>
<configuration>
<imageName>myapp/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
- imageName 是生成镜像的镜像名
- dockerDirctory 是Dockerfile存放的位置
进入pom.xml文件目录下,执行打包命令:
mvn package docker:build
打包过程docker会自动pull jdk8并生成镜像push到docker中,
打包完成后查看docker中的镜像:
sudo docker images
4、创建容器运行镜像
docker run -p 8080:8080 --name sringboot1 -d myapp/springboot
十一、Intellij idea springboot项目的发布及调试
1、idea安装插件docker integration
2、在src/main/docker下创建dockerfile、runboot.sh以及生成的jar包
dockerfile内容
FROM java:8
VOLUME /tmp
RUN mkdir /app
ADD springboot2-0.0.1-SNAPSHOT.jar /app/app.jar
ADD runboot.sh /app/
RUN bash -c 'touch /app/app.jar'
WORKDIR /app
RUN chmod a+x runboot.sh
EXPOSE 8081
EXPOSE 5005
CMD /app/runboot.sh
RUN echo "Asia/Shanghai" > /etc/timezone;
runboot.sh内容
sleep 20
java -Djava.security.egd=file:/dev/./urandom -jar -agentlib:jdwp=transport=dt_socket,address=5005,suspend=n,server=y /app/app.jar
3、插件配置 运行和调试添加docker配置
4、远程调试配置 运行和调试添加Remote配置
springboot项目打包时加入远程调试配置5005端口:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
</jvmArguments>
</configuration>
</plugin>
十二、解决出错问题
1、容器映射端口至主机报错解决方法
当执行开启远程api
dockerd -H unix:///var/run/docker.sock -H tcp://192.168.201.129:2375
或者执行运行新容器
docker run -p 80:80
有时候会出现如下错误信息:
COMMAND_FAILED: '/sbin/iptables -t nat -A DOCKER -p tcp -d 0/0 --dport 8111 -j DNAT --to-destination 172.17.0.6:8111 ! -i docker0' failed: iptables: No chain/target/match by that name.
是由于防火墙设置变动时对docker0虚拟网卡造成影响
解决方法如下:
pkill docker
iptables -t nat -F
ifconfig docker0 down
brctl delbr docker0
2、查看端口和查看进程运行
查看端口
netstat -an | grep 5005
查看进程
ps aux | grep program
ps -ef|grep java|
参考资源:
1.Docker教程|菜鸟教程
http://www.runoob.com/docker/docker-tutorial.html
2.docker私有仓库 徐茂盛
https://blog.csdn.net/bingoxubin/article/details/78726092
3.学习Docker之Docker初体验—SpringBoot集成Docker的部署、发布与应用 爆米花机枪手 https://blog.csdn.net/qqHJQS/article/details/79101846