Docker使用全攻略(centos 7)

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

https://www.daocloud.io/

2、添加主机

image

在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配置

image

image

4、远程调试配置 运行和调试添加Remote配置

image

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值