学习命令的正确方式,其实是先手动操作一个简单的命令,然后了解命令的基本含义,然后再看命令的相关文章。
所以,网上哪些docker的文章,基本上都不适于学习入门。
基础命令如下:
FROM openjdk:8-jre-alpine
LABEL author="kiba <xxx@126.com>" # 镜像描述
LABEL describe="test image" #镜像描述
MAINTAINER kiba <xxx@126.com> # 作者
COPY java /opt/program # 复制java文件夹的内容到 /opt/program 不存在的目录自动创建
EXPOSE 8520 #明确指定容器运行时需要暴露的端口。这个指定一般来说不用,因为创建容器时会用 -p来暴露端口
ENTRYPOINT ["java", "-jar", "/opt/program/app-kiba-spring-kafka-1.0.0.jar"]
首先连接linux,然后创建一个文件夹,然后创建一个Dockerfile文件,没有后缀名。
然后编辑这个文件,复制上面的命令进去。
复制时,注意删掉#后面的注释,如下图:
然后CD到这个目录,执行命令。
docker build -t kiba-test-image:latest .
注意最后的 【. 】必须有。
执行结果如下:
然后查询镜像。
docker images
如下图,我们多了一个自定义镜像。
现在,我们再来了解一下命令含义。
了解了命令内容,就知道了,刚才的命令是从网上下载一个openjdk:8-jre-alpine镜像,然后对其进行编辑,并复制了一个jar包进去,然后,要求该镜像,创建容器时,启动这个jar包。
现在,我们创建一个容器
docker run -it -d --name kiba-test-container -p 8051:8520 kiba-test-image:latest
注意:这里的-d一定要加,不然docker就会在前台运行。
如果不加-d,就是在前台运行,可以使用Ctrl+C退出。
删除容器相关命令如下:
docker rm kiba-test-container # 删除容器
docker ps -a # 查看全部容器
rmi kiba-test-image # 删除镜像
docker images # 查看全部镜像
因为copy命令复制的文件夹下,还有个startup.sh,然后就尝试一下用sh启动。
但结果不尽如人意,一直未能启动成功。
尝试错误命令组合如下:
#RUN chmod 777 /opt/startup.sh
#ENTRYPOINT ["sh", "/opt/startup.sh"] #启动异常 Exited
#RUN chmod u+x /soft/app-kiba-spring-kafka/startup.sh
#RUN chmod 777 /startup.sh
#ENTRYPOINT ["sh", "/startup.sh"] #启动异常 Exited
#ENTRYPOINT ["./startup.sh"] #启动异常 exec ./startup.sh: exec format error
# CMD ["sh", "/startup.sh"] #启动异常 Exited
# CMD ["/startup.sh"] #启动异常 Exited docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "/startup.sh": permission denied: unknown.
#CMD ["/startup.sh"] 启动异常 Exited
上网调查了一下,有说能运行sh的,有说不能运行sh的。想来是比较麻烦,不过命令可以直接运行,sh运行不了也不用太纠结。
经过测试,感觉还是自动创建镜像更加省心。
创建镜像命令。
docker pull java:openjdk-8u111-jre
docker run -it -d --name kiba-test-custom -p 8052:8520 java:openjdk-8u111-jre /bin/bash
docker exec -it kiba-test-custom /bin/bash
下面这个命令不成立,因为openjdk:8-jre-alpine没有/bin/bash。
docker run -it -d --name kiba-test-custom -p 8052:8520 openjdk:8-jre-alpine /bin/bash
openjdk:8-jdk-alpine
和java:openjdk-8u111-jre
都是Java的安装包,但它们的来源和用途略有不同。openjdk:8-jdk-alpine
是基于Alpine Linux构建的轻量级JDK版本,它包含了Java运行环境所需的基本组件,体积更小巧,适合于资源有限的环境。你可以使用它在Docker容器中运行Java应用程序。java:openjdk-8u111-jre
则是OpenJDK发行的标准JRE(Java Runtime Environment),它包含Java虚拟机(JVM)和Java应用程序所需的类库。它是一个独立的安装包,可以在各种操作系统上安装和使用。
然后使用docker cp复制文件。
docker cp /soft/resources/app-kiba-spring-kafka-1.0.0.jar kiba-test-custom:/resources/app-kiba-spring-kafka-1.0.0.jar
然后,再手动处理容器,让jar可以运行,再将这个容器提交为新镜像。
docker commit kiba-test-custom kiba-test-custom-image;
然后再使用自定义镜像,这样用起来更方便。
再同级目录编写docker-compose.yml文件,编写代码如下:
version: "2.22.0"
services:
kibaDocker:
build:
context: .
dockerfile: Dockerfile
image: kiba-tewt-image_10
container_name: kiba-test-container-10
ports:
- 8529:8520 # 宿主:容器
version对应上dockercompose就行,对不上也行。
然后下面的内容,就可以字面理解了,就上面手动创建容器的命令。
然后执行。
docker-compose up -d
-d是后台运行的意思。
然后就正式运行成了。访问http://10.1.0.145:8529/code/doc.html即可