Docker使用

1 系统命令

  • yum install docker #安装docker
  • systemctl start docker # 启动
  • systemctl status docker # 状态
  • systemctl stop docker #关闭
  • systemctl restart docker # 重启

2 docker启动和退出

  1. docker run -it ubuntu:15.10 /bin/bash # 启动+进入
  2. ctrl +p +q 退出->容器挂起
  3. docker ps #查看容器信息
  4. docker exec -it f6965d4c6c77 bash 进入
  5. exit->挂起
  6. docker attach f6965d4c6c77 进入
  7. exit->停止

3 docker后台启动

  • docker run -d ubuntu:15.10 /bin/bash
  • docker run -d ubuntu:15.10 /bin/sh -c
  • “while true; do echo hello world; sleep 1; done”
  • docker logs 容器id // 查看docker的日志
  • docker stop 容器id // 停止容器

4 容器命令

  • docker ps // 查看正在运行的容器
  • docker ps -a // 查看所有的容器
  • docker export 容器id > ubuntu.tar // 压缩容器,将容器导出成一个压缩包
  • docker rm 容器id // 删除容器
  • docker container prune // 删除所有已经停止的容器
  • cat docker/ubuntu.tar | docker import - test/ubuntu:v1 // 导入压缩包作为镜像

5 镜像命令

  • docker search ubuntu // 搜索镜像
  • docker pull ubuntu // 下载镜像,不跟版本号时,就下载最新的镜像
  • docker images // 查看本地有哪些镜像
  • docker rmi 镜像id // 删除本地镜像
  • docker inspect ubuntu:15.10 // 查看镜像详细信息
  • docker inspect 镜像id // 查看镜像详细信息

6 docker启动web服务

  • docker run -d -P training/webapp python app.py // 未指定端口 -p 5001:5000 将容器内部的5000端口指定为5001端口
  • docker ps // 查看端口 0.0.0.0:32768->5000/tcp 将容器尼日不的5000端口映射为本地的32768端口
  • curl http://localhost:32768/ // 访问网站
  • docker port 容器id(容器名) //将容器id的端口映射打印出来
  • docker top 容器id(容器名) //显示容器里哪个进程在运行
  • docker run -d -p 5001:5000 --name ww training/webapp python app.py

7 docker 挂载

  • docker -v 挂载
    • -v 容器内路径 # 匿名挂载
    • docker run -d -P --name=nginx01 -v /etc/nginx nginx
    • -v 卷名:容器内路径 # 具名挂载 docker run -d -P --name=nginx02 -v test01:/etc/nginx nginx
    • -v /宿主机路径:容器内路径 # 具名挂载
  • docker volume ls # 显示容器-本地路径 挂载对应关系
  • docker volume inspect 卷名 # 显示卷名对应的本地路径名 docker volume inspect test01
  • docker 的卷位置都放在/var/lib/docker/volumes/下面

8 docker本地仓库部署

  1. docker pull registry # 拉取仓库镜像
  2. mkdir /home/wc/mydocker/local_registry # 建立本地文件夹
  3. docker run -d -p 5001:5000 --name=localregistry --restart=always --privileged=true -v /home/wc/mydocker/local_registry/:/var/lib/registry docker.io/registry
    • p 5001:5000 将容器端口号5000映射为宿主机端口号5001
    • –name=localregistry 容器名字,不能重名
    • –restart=always 自动重启
    • –privileged=true centos7中的安全模块selinux把权限禁止了,加上这行是给容器增加执行权限
    • -v /home/wc/mydocker/local_registry/:/var/lib/registry 目录挂载,假如删除容器,我们本地的镜像不会被删除
    • docker.io/registry 镜像名称
  4. 给docker注册https协议,支持https访问
    使用vim编辑/etc/docker/daemon.json文件,命令为: vim /etc/docker/daemon.json
    按i是插入,按esc再按:再输出wq!是退出并保存
    {
      “insecure-registries”:[“192.168.179.131:5001”],
       “registry-mirrors”: [“https://registry.docker-cn.com”]
      }
    注释:
      insecure-registries----->开放注册https协议
      registry-mirrors----->仓库源
    ps:主机ip使用ifconfig -a 查看ens33的数值:192.168.179.131
  5. 重启docker服务 systemctl restart docker
  6. 对该镜像新建一个tag,把该镜像名字修改为:ip:5001/helloworld 例如: docker tag helloworld 192.168.179.131:5001/helloworld
  7. 推送到本地仓库:docker push 192.168.179.131:5001/helloworld
  8. 在本地镜像仓库查看:/home/wc/mydocker/local_registry/docker/registry/v2/repositories
  9. 删除 rmi -f docker.io/helloworld
  10. 从本地拉取下来docker pull 192.168.179.131:5001/helloworld

9 使用Dockerfile 定制镜像

  1. 新建Dockerfile文件;
  2. 输入:
FROM nginx
RUN echo 'this is a local nginx image' > /usr/share/nginx/html/index.html
  1. docker build 命令用于使用 Dockerfile 创建镜像。docker build -t nginx:v3 .
  2. 启动nginx镜像 : docker run -d -p 8080:80 nginx:v3
  3. 通过网页查看:192.168.179.132:8080

10 Dockerfile 镜像命令解析:

  1. FROM 镜像的开始
  2. MAINTAINER 维护者信息
  3. RUN 构建镜像时执行的命令
  4. ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
  5. COPY 功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
  6. CMD 容器启动时才进行调用
  7. EXPOSE 端口
  8. VOLUME 挂载
  9. WORKDIR 切换工作目录:cd

11 Dokcerfile 部署java程序

  • 简单模式
  1. 创建simple文件夹,将hello_jar.jar 拷贝过去;
  2. 编写Dockerfile文件:
FROM openjdk:8-jdk-alpine
ADD hello_jar.jar hello_jar.jar
ENTRYPOINT ["java","-jar","/hello_jar.jar"]
  1. 构建docker镜像:docker build -t java-hello:v1 .
  2. 使用docker images 查看
  3. 使用docker run -it java-hello:v1 运行
  • 困难模式:
  1. 创建hard文件夹,将两个文件都拷贝过去;
  2. 解压tar -xzvf jdk-8u321-linux-x64.tar.gz
  3. 文件夹重命名 mv jdk1.8.0_321/ jdk
  4. 编写Dockerfile文件
FROM ubuntu:16.04
MAINTAINER wangcong@qq.com
COPY ./jdk /usr/local/jdk
ENV JAVA_HOME /usr/local/jdk
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH .:$JAVA_HOME/lib:$JRE_HOME/lib
ENV PATH $PATH:$JAVA_HOME/bin
ADD hello_jar.jar hello_jar.jar
ENTRYPOINT ["java","-jar","/hello_jar.jar"]
  1. 构建docker镜像:docker build -t java-hello:v2 .

12 Docker部署Tomcat服务

  1. 准备4个文件
    • apache-maven-3.6.2-bin.tar.gz (maven 仓库管理包)
    • apache-tomcat-8.5.78.tar.gz (tomcat包)
    • jdk-8u321-linux-x64.tar.gz (jdk包,版本1.8)
    • hello_web_war.war (自己编译的war包)
  2. 分别解压、重命名,解压命令:tar -xzvf,重命名:mv
  3. 编写Dockerfile文件:
FROM ubuntu:16.04
MAINTAINER wangcong@126.com
COPY ./jdk /usr/local/jdk
COPY ./tomcat /usr/local/tomcat
COPY ./maven /usr/local/maven

ENV M2_HOME=/usr/local/maven
ENV JAVA_HOME /usr/local/jdk
ENV JRE_HOME $JAVA_HOME/jre  
ENV CLASSPATH .:$JAVA_HOME/lib:$JRE_HOME/lib  
ENV PATH $PATH:$JAVA_HOME/bin
ENV PATH $PATH:$M2_HOME/bin
ENV CATALINA_OPTS -Xms128m -Xmx1024m -XX:PermSize=64M -XX:MaxPermSize=512M
ENTRYPOINT /usr/local/tomcat/bin/startup.sh && tail -F /usr/local/tomcat/logs/catalina.out
  1. 使用docker build 搭建镜像:docker build -t tomcat-hello:v2 .

12.2 把自己的war包添加进去

方式一:先启动,再复制进去

  1. 先启动起来docker镜像;
  2. 将war包复制进行到tomcat下的webapp里面
docker cp hello_web_war.war d0e571e687ec:/usr/local/tomcat/webapps
  1. 进到镜像里面查看是否复制成功
docker exec -it d0e571e687ec  /bin/bash
  1. 重启docker镜像
docker restart d0e571e687ec
  1. 在本地浏览器查看
http://192.168.179.128:8081/hello_web_war/Servlet

方式二、使用挂载的方式

  1. 新建文件夹hello,将hello_web_war.war拷贝进去
  2. –privileged=true在运行容器的时候,给容器加特权
docker run -d --name v1 --privileged=true -p 8081:8080 -v  /home/wc/mydocker/docker_web/hello:/usr/local/tomcat/webapps   tomcat-web:v1
  1. 进入容器,调转到具体的路径下,发现里面有hello_war.war
  2. 启动浏览器访问网站
http://192.168.179.128:8081/hello_web_war/Servlet

ps:里面没有首页,因为做了挂载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王小葱鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值