测试服务器准备工作
安装docker
新装好的CentOS是没有docker的,yum安装源里也没有,所以首先我们要先安装docker。
根据docker官网的文档,我们要做的就是先添加docker-ce源,再使用yum命令安装就好,很简单。
使用ssh连接到服务器或者直接进入服务器的命令行运行以下命令就好了:
yum remove docker docker-common docker-selinux docker-engine \
&& yum install -y yum-utils device-mapper-persistent-data lvm2 \
&& yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo \
&& yum install docker-ce -y \
&& systemctl enable docker \
&& systemctl start docker
以上命令就会安装好docker并且作为服务启动。
然后按照我的习惯,会先创建docker的数据目录,作为以后容器映射出来的volume持久化数据,方便以后管理和备份移植等。
mkdir -p /data/docker
然后我也会再创建个docker的网络接口,使用桥接网络的话,容器之间的通信需要在一个网络下。
docker network create -d bridge eaon
用docker运行容器
安装好docker之后,就可以运行一些容器了。为了方便管理docker,我会比较喜欢用portainer这个web gui来配合命令行使用,所以就先运行portainer吧。
使用docker run命令可以运行一个容器,其中比较常用的几个参数先简单说明下,后面就不再提示了。
- -d: 后台运行,启动容器后在后台运行容器
- –name: 容器名称,起个名字方便区分和管理容器
- -p: 端口映射,把容器内的端口映射出来,通过宿主(服务器)IP+端口就可以访问到容器的服务,如果容器内的服务端口是80,想映射到宿主端口81的话,命令中就应该这样写
-p 81:80
- -v: volume映射,可以把容器中的目录映射到宿主的目录中,就可以把数据持久化到服务器上,不然删除容器的时候容器内的数据也会跟着删除的。命令的使用方式
-v 宿主目录:容器目录
,比如-p /data/docker/nginx:/etc/nginx
就可以把容器的/etc/nginx映射到服务器的/data/docker/nginx - –restart: 容器的重启方式,有几个选项,
always
会跟着docker服务运行而启动,unless-stopped
除非容器被手动停止,否则会跟着docker服务运行而启动。none
或者不设置–restart参数的话,docker服务启动的时候此容器不会跟着启动。
portainer
docker run -d --name portainer -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /data/docker/portainer:/data -v /etc/localtime:/etc/localtime --restart always portainer/portainer
运行完毕后,如果没有报错的话,可以用浏览器打开服务器IP:9000
来访问,设置好用户名密码,选择local本地docker,就可以进去管理了。
mysql
开发时使用MySQL 8,不过MySQL 8的默认密码认证插件改成了caching_sha2_password
,对于一些老的mysql客户端连接可能有问题, 如果希望改回以前的认证插件,需要先做一点设置:
mkdir -p /data/docker/mysql/conf.d
vi /data/docker/mysql/conf.d/my.cnf
然后在插入以下内容:
[mysqld]
default-authentication-plugin=mysql_native_password
保存退出,如果不需要改认证插件的话,可以直接进行下一步,用docker来运行mysql:
docker run -d --name mysql -p 3306:3306 -v /data/docker/mysql/data:/var/lib/mysql -v /data/docker/mysql/conf.d:/etc/mysql/conf.d -v /etc/localtime:/etc/localtime -e MYSQL_ROOT_PASSWORD="rootpassword" --network=eaon --restart unless-stopped mysql:8
其中的-e MYSQL_ROOT_PASSWORD="rootpassword"
是设置root密码为rootpassword
,可以自行修改
tomcat
然后服务器上的tomcat也用docker运行,因为docker的目录映射不会改变目录的内容,所以想要把tomcat的几个目录内容保留的话,需要先从容器里面拷贝出来。
mkdir -p /data/docker/tomcat \
&& docker run --name tmp-tomcat-container -d tomcat:9-jre11-slim\
&& docker cp tmp-tomcat-container:/usr/local/tomcat/webapps /data/docker/tomcat/ \
&& docker cp tmp-tomcat-container:/usr/local/tomcat/conf /data/docker/tomcat/ \
&& docker cp tmp-tomcat-container:/usr/local/tomcat/logs /data/docker/tomcat/ \
&& docker rm -f tmp-tomcat-container
这样我们就把tomcat容器里的webapps、conf目录下的文件拷贝到了/data/docker/tomcat/
下,这时候我们再把这几个目录映射到想要运行的tomcat容器,就可以很方便地修改设置、部署war了:
docker run -d --name tomcat -p 8080:8080 -v /data/docker/tomcat/webapps:/usr/local/tomcat/webapps -v /data/docker/tomcat/conf:/usr/local/tomcat/conf -v /data/docker/tomcat/logs:/usr/local/tomcat/logs -v /etc/localtime:/etc/localtime -e JAVA_OPTS="-Xms256m -Xmx512m" -e TZ="Asia/Shanghai" --network=eaon --restart unless-stopped tomcat:9-jre11-slim
jenkins
没什么特别需要设置的,就是tomcat用了8080端口,jenkins就换一个8082了
docker run -dit --name jenkins --network=eaon -u root -p 50000:50000 -p 8082:8080 -v /data/docker/jenkins:/var/jenkins_home -v /etc/localtime:/etc/localtime -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai jenkins/jenkins:lts-jdk11
总结
以上就是docker几个基本容器的运行方式了,第一次运行容器会需要下载镜像到本地,如果觉得太慢的可以去搜一下docker换源的教程。