Docker
1、安装
#docker-ce安装
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install docker-ce
2、启动
$ sudo service docker start
$ sudo chkconfig docker on //开机自动启动
3、安装和基本命令
docker pull centos # 安装centos
docker run -it --name hello centos:latest /bin/bash
############如下,已经启动容器,并进入容器中操作了########3
[root@0c30524e059a /]#
[root@0c30524e059a /]#
[root@0c30524e059a /]#
[root@0c30524e059a /]#
[root@0c30524e059a /]#
[root@0c30524e059a /]#
# ctrl+p+q退出容器 ,不关闭容器
docker ps
# 然后就看到如下的内容
#CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#0c30524e059a centos:latest "/bin/bash" 4 minutes ago Up 4 minutes hello
# 杀掉进程
docker stop hello # 优雅关闭,等待10秒然后关闭
docker kill hello # 直接关闭
容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
容器操作运维 — docker [ps|inspect|exec|logs|export|import|port]
容器rootfs命令 — docker [commit|cp|diff]
4、仓库相关
1、dokcerhub
- 需要去https://hub.docker.com注册,然后邮箱激活
Docker pull/search/login/push/tag
- tag [镜像名:版本] [仓库]/[镜像名:版本]:标记本地镜像,将其归入某一仓库
- Push [仓库]/[镜像名:版本]: 推送镜像到仓库 --需要登陆
- Search [镜像名]:在仓库中查询镜像 – 无法查询到tag版本
- Pull [镜像名:版本]: 下载镜像到本地
- Login:登陆仓库
# 1、login 命令登录
docker login
# 然后输入登录名密码
# 2、tag标记一个镜像,指定自己的仓库
docker tag hello-world baipu/hello:2.0
docker images # 查看是否有镜像
# 3、push命令推送到仓库
docker push baipu/hello:2.0
2、私有仓库
# 用注册镜像(在daemon中配置 {"registry-mirrors":["https://registry.docker-cn.com"]})
# 1、下载registry镜像
docker pull registry
# 2、启动
docker run -d --name reg -p 5000:5000 registry
#3、检查
curl http://127.0.0.1:5000/v2/_catalog
# 4、私服仓库推送
docker tag hello-world http://127.0.0.1:5000/hello-world
docker images
docker push http://127.0.0.1:5000/hello-world
# 5、查询私服
curl http://127.0.0.1:5000/v2/_catalog
curl http://127.0.0.1:5000/v2/hello/tags/list
3、创建镜像
1、创建容器
docker run -it --name cent centos /bin/bash
2、安装nginx
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum search nginx ##搜索一下看看
yum install nginx -y ## 安装
# 启动nginx
whereis nginx
/usr/sbin/nginx
curl 127.0.0.1
3、commit将一个容器提交为一个nginx镜像
将上边的cent容器提交成一个镜像
docker ps # 查看所有的容器
docker commit cent cent-ng:v1 # 创建镜像
docker images # 查看所有的镜像
# 运行镜像
docker run -it --name ng cent-ng:v1 /bin/bash
# 启动的时候,自动运行镜像
docker run -d --name ngx2 cent-ng:v1 /usr/sbin/nginx -g "damemon off "
后面运行的命令都是容器命令,由于nginx命令没有设置到path中,所以全路径启动,
而nginx -g这个参数是指可以在外面添加指令到nginx的配置文件中,
daemon off是指nginx服务不运行在后端,而是在前台运行(container中的服务必须运行在前台
5、数据相关
- 镜像与容器读写层,通过联合文件系统,组成系统文件视角
- 容器服务运行中,一定会生成数据
- 容器只是运行态的服务器,是瞬时的,不承载数据的持久功能
1、volume文件挂载
-v 本地路径:容器中的路径
docker run -v --name data /Users/baipu/Downloads:/opt/test -it centos /bin/bash
然后通过docker inspect data
中的Mounts中的source就是本地的路径
2、volumes-from引用数据卷
新启动一个路径,引用一个上一个容器data的挂在路径,两套容器直接共享同一套文件系统
docker run -it --rm --volumes-from data --name app centos /bin/bash
# 进入到容器之后,可以看看
ls /opt/test # 得到一个和data容器一模一样的挂载
3、备份/恢复
备份:docker run --rm --volumes-from data -v $(pwd):/backup centos tar cvf /backup/data.tar /opt/data
恢复:docker run --rm --volumes-from data -v $(pwd):/backup centos tar xvf /backup/data.tar -C /
docker run --rm ----- 启动一个新的容器,执行完毕删除
--volumes-from data ------- data容器中挂载卷
-v $(pwd):/backup --------挂载当前目录到容器中为backup
cvf /backup/data.tar /opt/data --------- 备份/opt/data目录(即卷中所有的数据)为data.tar
xvf /backup/data.tar -C / ---------- 解压data.tar 到根目录/ ,因tar归档中已包含了/opt/data路径
4、删除数据卷
docker rm -v data
6、Dockerfile
1、创建容器
找一个目录
/home/weblogic/dockerfile/cmd
编辑一个文件,
dockerfile
FROM centos #CMD echo "hello cmd" CMD ["/bin/bash/","-c","echo , 'hello cmd !'"]
创建镜像
docker build -t cmd .
docker run -it cmd
(hello cmd !)
2、基本要素
标签 | 含义 | 备注 |
---|---|---|
FROM | 基础镜像 | 必须第一行,baseimage |
MAINTAINER | 维护信息的人 | 用来标示iamge作者 |
RUN | 命令前加上run即可 | 启动一个容器,执行命令,提交存储的变更。多条命令联合执行用&& |
ADD | copy文件,会自动解压 | |
WORKDIR | 设置当前的工作目录 | |
VOLUME | 挂载主机的目录 | |
EXPOSE | 要打开 | 声明运行时容器提供的服务端口,着只是一个申明,运行时候不会因为这个申明就打开这个端口的服务。 |
CMD | 启动后操作的命令 | 执行容器的默认行为,不再用image中的CMD默认定义的命令 |
3、docker制作nginx
cd /Users/baipu/work/dockerfile/nginx_docker # (没有就随便找个路径,创建一个目录)
wget http://nginx.org/download/nginx-1.19.0.tar.gz # 下载nginx
tar -zvxf nginx-1.19.0.tar.gz
vi Dockerfile
##########Dockerfile begin #####################3
# base image
FROM centos
# MAINTAINER
MAINTAINER peter
# put nginx-1.13.2.tar.gz
ADD nginx-1.19.0 /usr/local/src/nginx-1.19.0
# running required command
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel
RUN rpm -ivh http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/i386/epel-release-6-8.noarch.rpm
RUN yum install -y GeoIP GeoIP-devel
RUN yum install -y libxslt-devel -y gd gd-devel pcre pcre-devel
RUN useradd -M -s /sbin/nologin nginx
# change dir to /usr/local/src/nginx-1.19.0
WORKDIR /usr/local/src/nginx-1.19.0
# execute command to compile nginx
RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module && make && make install
EXPOSE 80
####################Dockerfile end ##############
注意:这里原来用的是1.13的版本,然后centos和nginx不符合,折腾了一晚上,发现还是版本问题,改成1.9之后秒过
docker history cent-ngx2
# 手动启动一下
docker run -d --name ng1 cent-ngx2 /usr/local/nginx/sbin/nginx -g "daemon off;"
# 重新编辑一个 这里用了CMD表示默认执行的cmd
####################Dockerfile begin ##############
# base image
FROM cent-ngx2:latest
ENV PATH /usr/local/nginx/sbin:$PATH
CMD ["/bin/bash", "-c", "nginx -g 'daemon off;'"]
####################Dockerfile end ##############
docker build -t nginx:v2.
docker run -d --name ng2 nginx:v2
# 继续重新编辑一个 这里用了entrypoing,表示这个nginx的主业不能被随便执行命令的时候修改
####################Dockerfile begin ##############
# base image
FROM cent-ngx2:latest
ENV PATH /usr/local/nginx/sbin:$PATH
ENTRYPOINT ["nginx"]
CMD ["-g","daemon off;"]
####################Dockerfile end ##############
docker build -t nginx:v3 .
docker run -d --name ng3 nginx:v3
7、SpringBoot打包方法
1、手动docker启动
1.1 新建一个springBoot项目
- pom.xml
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.3.0.RELEASE
com.springdocker
dockersty
0.0.1-SNAPSHOT
dockersty
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter-thymeleaf
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
org.springframework.boot
spring-boot-maven-plugin
- application.properties 申明端口8090
#启动: nohup java -Dspring.profiles.active=dev -jar synchronius-1.0.jar > log.erp 2>&1 &
server.port: 8090
server.compression.enabled: true
- 写一个controller
@Controller
public class TestController {
@GetMapping("/test")
public ModelAndView index() throws UnknownHostException {
ModelAndView modelAndView = new ModelAndView();
InetAddress addr = InetAddress.getLocalHost();
String ip=addr.getHostAddress().toString(); //获取本机ip
modelAndView.addObject("serverIp",ip);
modelAndView.setViewName("index");
return modelAndView;
}
}
- 运行,没有任何问题
1.2 docker部署项目
-
服务器编写Dockerfile
FROM openjdk:8 ADD ["target/dockersty-0.0.1-SNAPSHOT.jar", "web.jar"] EXPOSE 8090 ENTRYPOINT ["java","-jar","/web.jar"]
SpringBoot工程打包(maven里点击package)
将target中生成的压缩包
dockersty-0.0.1-SNAPSHOT.jar
包上传到服务器上Dockerfile文件所在路径下的target
中docker build -t dockersty .
docker run -d -p 8090:8090 --name doc dockersty