1 系统命令
- yum install docker #安装docker
- systemctl start docker # 启动
- systemctl status docker # 状态
- systemctl stop docker #关闭
- systemctl restart docker # 重启
2 docker启动和退出
- docker run -it ubuntu:15.10 /bin/bash # 启动+进入
- ctrl +p +q 退出->容器挂起
- docker ps #查看容器信息
- docker exec -it f6965d4c6c77 bash 进入
- exit->挂起
- docker attach f6965d4c6c77 进入
- 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本地仓库部署
- docker pull registry # 拉取仓库镜像
- mkdir /home/wc/mydocker/local_registry # 建立本地文件夹
- 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 镜像名称
- 给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 - 重启docker服务 systemctl restart docker
- 对该镜像新建一个tag,把该镜像名字修改为:ip:5001/helloworld 例如: docker tag helloworld 192.168.179.131:5001/helloworld
- 推送到本地仓库:docker push 192.168.179.131:5001/helloworld
- 在本地镜像仓库查看:/home/wc/mydocker/local_registry/docker/registry/v2/repositories
- 删除 rmi -f docker.io/helloworld
- 从本地拉取下来docker pull 192.168.179.131:5001/helloworld
9 使用Dockerfile 定制镜像
- 新建Dockerfile文件;
- 输入:
FROM nginx
RUN echo 'this is a local nginx image' > /usr/share/nginx/html/index.html
- docker build 命令用于使用 Dockerfile 创建镜像。docker build -t nginx:v3 .
- 启动nginx镜像 : docker run -d -p 8080:80 nginx:v3
- 通过网页查看:192.168.179.132:8080
10 Dockerfile 镜像命令解析:
- FROM 镜像的开始
- MAINTAINER 维护者信息
- RUN 构建镜像时执行的命令
- ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
- COPY 功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
- CMD 容器启动时才进行调用
- EXPOSE 端口
- VOLUME 挂载
- WORKDIR 切换工作目录:cd
11 Dokcerfile 部署java程序
- 简单模式
- 创建simple文件夹,将hello_jar.jar 拷贝过去;
- 编写Dockerfile文件:
FROM openjdk:8-jdk-alpine
ADD hello_jar.jar hello_jar.jar
ENTRYPOINT ["java","-jar","/hello_jar.jar"]
- 构建docker镜像:docker build -t java-hello:v1 .
- 使用docker images 查看
- 使用docker run -it java-hello:v1 运行
- 困难模式:
- 创建hard文件夹,将两个文件都拷贝过去;
- 解压tar -xzvf jdk-8u321-linux-x64.tar.gz
- 文件夹重命名 mv jdk1.8.0_321/ jdk
- 编写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"]
- 构建docker镜像:docker build -t java-hello:v2 .
12 Docker部署Tomcat服务
- 准备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包)
- 分别解压、重命名,解压命令:tar -xzvf,重命名:mv
- 编写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
- 使用docker build 搭建镜像:docker build -t tomcat-hello:v2 .
12.2 把自己的war包添加进去
方式一:先启动,再复制进去
- 先启动起来docker镜像;
- 将war包复制进行到tomcat下的webapp里面
docker cp hello_web_war.war d0e571e687ec:/usr/local/tomcat/webapps
- 进到镜像里面查看是否复制成功
docker exec -it d0e571e687ec /bin/bash
- 重启docker镜像
docker restart d0e571e687ec
- 在本地浏览器查看
http://192.168.179.128:8081/hello_web_war/Servlet
方式二、使用挂载的方式
- 新建文件夹hello,将hello_web_war.war拷贝进去
- –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
- 进入容器,调转到具体的路径下,发现里面有hello_war.war
- 启动浏览器访问网站
http://192.168.179.128:8081/hello_web_war/Servlet
ps:里面没有首页,因为做了挂载