一、操作镜像
下载镜像
docker pull 镜像名
docker pull hello-world
导入镜像文件
镜像导入(要在hello-world.tar.gz 文件所在目录下执行)
docker load < hello-world.tar.gz
删除镜像文件
docker image rm hello-world
查看镜像
docker images
导出镜像文件
镜像导出(linux系统中的镜像文件下载到本地)
docker save hello-world | gzip > hello-world.tar.gz
运行镜像文件
启动容器
docker run hello-world
二、操作容器
容器是基于镜像的,先得有镜像文件,才能启动!!
查看容器
docker ps -a (all的简写)
启动容器
命令:
docker run -it xxxx bash
1)xxxx - 镜像名, 或 image id 的前几位,
2)-it 这是两个参数(-i表示交互式操作, -t 表示终端)
3) bash 表示进入操作终端,基于交互式进行相关操作(例如执行linux相关指令)。
docker run -it centos:7 bash
进入(exec)指定容器
docker exec -it 802 bash #802为容器id
从容器(Container)中退出(exit)
exit
停止运行的容器
docker container stop 199158 #199158为容器自己的id
重新启动容器
docker container restart 199158 #199158位容器自己的id
删除容器
docker (container) rm -f(强制删除) 199158(容器的id)
清理所有处于终止状态容器
docker container prune
三、管理容器篇
在容器中管理数据主要有两种方式:
1.数据卷(Volumes)
2.挂载主机目录 (Bind mounts)
创建数据卷
docker volume create container-vol
查看所有数据卷
docker volume ls
查看指定 数据卷 的信息
docker volume inspect container-vol
启动挂载数据卷的容器
docker run -it --mount source=container-vol,target=/root centos:7 bash
或
docker run -it -v container-vol:/root centos:7 bash
说明:
-v container-vol:/root 把数据卷 container-vol 挂载到容器的 /root 目录
删除数据卷(如果数据卷被容器使用则无法删除)
docker volume rm container-vol
清理无主数据卷
docker volume prune
挂载主机目录
docker run -it -v /usr/app:/opt/app centos:7 bash
说明:
1)/usr/app:为宿主机目录
2)/opt/app: 为启动容器的一个目录
3)-v 用于指定挂载目录,如果本地目录(宿主机目录)不存在, Docker 会自动为你按照挂载目录进行目录的创建。
查看挂载目录信息
docker inspect 91a #91a 为容器id
挂载在主机目录与挂载在数据卷的区别
挂载在主机目录:
优点:目录由用户自己管理,比较灵活
缺点:写入数据可能需要权限(假如用户没有给目录权限),需要重新赋权且目录的安全性比较低。
挂载在docker容器:
优点:由容器管理,即使容器坏掉也对文件没有影响,且写入数据的目录比较深,相对挂载在主机目录较安全。
四、docker查看日志的几个方式:
(1)docker logs --tail=1000 container( 容器名称) (查看容器前多少行的日志)(推荐)
(2)docker 容器启动后,可以进入以下位置查看日志(/var/lib/docker/containers/容器ID/容器ID-json.log)(进入容器内部查看日志)
(3)查看compose所有容器的运行日志
docker-compose -f docker-compose-app.yml logs -f
(4)查看compose下某个容器的运行日志
docker-compose -f docker-compose-app. yml logs -f<服务名>
(5) 也可以把compose的容器日志输出到日志文件里去,然后用tail -f随时查看
docker-compose -f docker-compose-app. yml logs -f >> myDockerCompose.log &
五、实战
1.需要准备JDK安装包,可以从此站点进行下载 华为下载源
2.创建 jdk-8 文件夹,将下载的 JDK 安装包放置在这个文件夹下,并创建 Dockerfile 文件
#ls
Dockerfile jdk-11.0.12_linux-x64_bin.tar.gz
Dockerfile:
#建立一个新的镜像文件,配置模板:新建立的镜像是以centos为基础模板
#因为jdk必须运行在操作系统之上
FROM centos:7.9.2009
# 维护者
MAINTAINER author <xxx@xx.com>
# 创建一个新目录来存储jdk文件
RUN mkdir /usr/local/jdk
RUN mkdir /usr/local/java
#将jdk压缩文件复制到镜像中,它将自动解压缩tar文件
ADD jdk-11.0.12_linux-x64_bin.tar.gz /usr/local/jdk/
ADD bp-emsp-cpo.jar /usr/local/java
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 设置环境变量
ENV JAVA_HOME /usr/local/jdk/jdk-11.0.12
ENV PATH $JAVA_HOME/bin:$PATH
# EXPOSE表示对外暴露的服务端口
EXPOSE 8005
# VOLUME 指定了临时文件目录为/tmp
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# ENTRYPOINT中写的是你容器启动时候要执行的指令
ENTRYPOINT ["java","-jar","/usr/local/java/bp-emsp-cpo.jar"]
3.使用 docker build 创建镜像,-t 后面跟着的是 镜像名:版本,最后的点是指当前目录,比如Dockerfile中的add命令,复制jdk安装包到镜像中,就是复制当前目录的jdk安装包
docker build -t emsp_cpo:11 . #不要丢掉这里的点
可以看到我们自己制作的镜像
docker images
emsp_cpo 11 3832427f0da8 8 days ago 242MB
4.使用镜像创建容器
命令:
docker run -it xxxx bash
1)xxxx - 镜像名, 或 image id 的前几位,
2)-it 这是两个参数(-i表示交互式操作, -t 表示终端)
3) bash 表示进入操作终端,基于交互式进行相关操作(例如执行linux相关指令)。
docker run -d --name emsp_cpo_11 -p 8004:8005 emsp_cpo:8 #-d 表示后台运行,-p用于指定端口映射,emsp_cpo:8为镜像文件名
查看复制进来的 jdk,看到是被自动解压的了
root@2e22ae0ee798:/usr/local/jdk# ls
jdk1.8.0_201
输出环境变量,就是 Dockerfile 中 ENV 描述的部分
root@2e22ae0ee798:/usr/local/jdk# echo $JAVA_HOME
/usr/local/jdk/jdk1.8.0_201
root@2e22ae0ee798:/usr/local/jdk# echo $CLASSPATH
.:/usr/local/jdk/jdk1.8.0_201/lib/dt.jar:/usr/local/jdk/jdk1.8.0_201/lib/tools.jar
root@2e22ae0ee798:/usr/local/jdk# echo $PATH
/usr/local/jdk/jdk1.8.0_201/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
5.从容器(Container)中退出(exit)
exit
6.----直接使用jdk11镜像命令启动
docker run -d --name emsp_cpo_11 -p 8088:8004 \
-v /docker/bp-emsp-cpo.jar:/usr/local/app.jar jdk11:11 \
java -jar -Xms256m -Xmx256m /usr/local/app.jar
docker ps #查看运行的容器
运行完成。。。。