Docker

linux部署软件时经常出现软件版本不统一的情况,为了版本控制着和跨平台性,现在企业中大多都是用docker在服务器上快速来部署软件.

1.docker的架构

docker主要由下面几部分组成:

client客户端用于输入命令行

registry镜像仓库,相当于maven的远程仓库,国外网站速度较慢,可配置成国内的镜像地址,比如阿里云镜像等

docker_host服务端,其中又包含docker deamon用于监听命令行,images镜像库(本地的)相当于maven的本地仓库,containers容器,容器彼此都是隔离的,一般一个容器内只放一个程序.

当运行一个版本的程序时,首先客户端发送一个运行程序的命令,服务端deamon接收到命令,去本地images中查找是否有该版本的程序,如果没有就会从远端registry镜像仓库中拉取一个到本地images,然后使用镜像运行出一个容器container,然后开放防火墙端口映射就可以访问该版本的程序了

2.docker的安装与配置镜像加速器

CentOS7 安装Docker
yum install -y yum-utils device-mapper-persistent-data lvm2      安装需要多的软件包

Docker_第1张图片
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo       设置yum源


yum install -y docker-ce      安装docker ,所有输入界面都是同意y
docker -v     查看docker版本,验证是否成功
systemctl start docker    启动docker环境
systemctl enable docker     设置开机自启动

默认都是从docker hub上下载镜像,需要修改/etc/docker/daemon.json文件

{
 "registry-mirrors":["http://hub-mirror.c.163.com"]
} 如网易云镜像地址

配置修改完成后需要重启docker 即输入命令systemctl restart docker

docker info 查看是否成功

3.docker的命令

进程相关命令(linux中的通用命令,docker可以换成其他程序的名称)

systemctl start docker 启动服务

systemctl stop docker 停止服务

systemctl restart docker 重启服务

systemctl status docker 查看服务的状态

systemctl enable docker 设置开机自启动

镜像相关命令

docker images查看本地镜像

docker search 镜像名称  搜索镜像仓库

docker pull 镜像名称 下载镜像,镜像名称格式为 名称:版本号  例如 nginx:1.18.0

docker rmi 镜像名称 删除镜像

容器相关命令

docker ps 查看正在运行的容器

docker ps -a 查看所有容器,包含运行的和停止的

docker run -d -p 80:80 --name=容器名 镜像名称     创建一个新的容器并运行(-d 后台运行容器,并返回容器ID             -p 主机端口:容器端口 指定映射关系)   容器名为自己给docker中的程序命的命比如mynginx

docker exec -it 容器名称 /bin/bash 进入到容器内部  exit退出容器

docker inspect 容器名称 查看容器信息

docker start 容器名称 启动容器

docker stop 容器名称 停止容器

docker rm 容器名称 删除容器

4.部署程序

部署mysql

docker search mysql 搜索mysql镜像

docker pull mysql:5.7 拉取mysql镜像

docker run -d -p 3306:3306 --name=mysql5.7 -e MYSQL_ROOT_PASSWORD=root mysql:5.7 \
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

后台运行端口映射主机端口3306容器端口3306,容器名称命名为mysql5.7 ,root账户密码设置为root mysql的版本为5.7,如果本地没有会自动联网下载,字符集为utf-8

cmd本地windows访问命令mysql -uroot -h 192.168.85.11 -P 3306 -p 其中192.168.85.11为远程服务器地址可替换 3306为端口号

部署tomcat

docker run -d --name=tomcat8.5 -p 8080:8080 tomcat:8.5 创建并启动容器

当我们在自己windows程序编好程序文件,可通过远程链接工具比如MobaXterm将文件传到linux中,但是要部署到docker容器中需要命令,命令如下

docker cp ./hello tomcat8.5:/usr/local/tomcat/webapps/ 从宿主机复制文件到容器(docker cp 宿主机路径 容器名称:容器路径)

使用docker部署大体步骤都一致,都与上述步骤类似,比如其他软件部署:

docker run -d --name=redis5.0 -p 6379:6379 redis:5.0  部署redis

docker run -d --name=nginx -p 80:80 nginx 部署nginx  等等

5.服务编排工具Compose

 安装docekr compose 工具
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

设置权限
chmod +x /usr/local/bin/docker-compose

查看版本 
docker-compose -version

编写compose配置文件

Docker_第2张图片

这样compose中配置的容器软件就能同时启动和开启了(图片上的是nginx和tomcat)

docker -compose up -d 后台启动容器

docker -compose down 停止并删除容器

补充:

停止并删除所有容器

docker stop $(docker ps -q)

docker rm $(docker ps -aq)

6.数据卷

数据都是宝贵的,为了防止docker中数据被删除数据不会丢失,一般真实数据都是放在宿主机上(服务器本机)或放在网络中,而是把数据卷挂载在容器中,可以理解为在docker中创建一个数据访问的快捷方式.这样一来各个容器间又能数据共享

mkdir -p /root/tomcat/webapps 在/root目录下创建tomcat目录用于存储tomcat信息,即建立数据卷

docker run -d --name=tomcat1 -p 8081:8080 -v /root/tomcat/webapps:/usr/local/tomcat/webapps tomcat:8.5
docker run -d --name=tomcat2 -p 8082:8080 -v /root/tomcat/webapps:/usr/local/tomcat/webapps tomcat:8.5

将/root/tomcat/webapps中的数据挂载到/usr/local/tomcat/webapps中

创建容器,设置端口映射与目录映射,docker run .........-v 宿主机目录(文件):容器内目录(文件).....

7.镜像的导入与导出

[root@itcast ~]# docker save -o mynginx.tar mynginx:a 将镜像mynginx:a保存成jar包mynginx.tar

[root@itcast ~]# docker load -i  mynginx.tar 从tar包将镜像导入到本机

8.镜像的制作

镜像的制作有两种方式:

1.使用容器制作镜像 

docker commit 容器id 镜像名称:版本号 版本号为自己定义的版本号

[root@itcast ~]# docker commit nginx mynginx:a

2.使用Dockerfile制作镜像

你可能感兴趣的:(docker,java,容器,linux)