List item
docker命令大全
1.安装配置
1.更新yum
yum update
2.安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
3.设置yum源(选择其中一个)
yum-config-manager –add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)
yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)
4.可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
5.安装Docker,命令:yum install docker-ce-版本号,我选的是docker-ce-18.03.1.ce,如下
yum install docker-ce-18.03.1.ce
6.启动Docker,设置开启自动启动docker
systemctl start docker
systemctl enable docker
2.镜像
1.镜像基础命令
docker images --查看所有本地主机上的镜像
# 可选项
--all , -a # 列出所有镜像
--quiet , -q # 只显示镜像的id
docker search --查找镜像
docker pull 镜像名:版本 --下拉镜像(不加版本默认最新)
docker rmi --删除镜像
docker rmi -f 镜像id --删除指定镜像
docker rmi -f 镜像id1 镜像id2 --删除多个镜像
docker rmi -f $(docker images -aq) --删除所有镜像
2.commit镜像
# 命令和git 原理类似
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:版本
列:docker commit -a="xiaofan" -m="add webapps app" d798a5946c1f tomcat007:1.0
3.容器
1.新建容器并启动
docker run 可选参数 镜像名称或镜像id
# 参数说明
--name="Name" 容器名字 用来区分容器
-d 以后台方式运行(容器使用后台运行, 就必须要有一个前台进程,docker发现没有应用,就会自动停止)
-it 使用交互方式运行,(启动时同时进入容器如:cenos)
-p 指定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
2.列出所有的运行的容器
# docker ps 命令
# 列出当前正在运行的容器
-a # 列出正在运行的容器包括历史容器
-n=? # 显示最近创建的容器
-q # 只显示当前容器的编号
3.退出容器
exit # 直接退出容器并关闭
Ctrl + P + Q # 容器不关闭退出
4.删除容器
docker rm -f 容器id # 删除指定容器(-f表示强制)
docker rm -f $(docker ps -aq) # 删除所有容器
docker ps -a -q|xargs docker rm -f # 删除所有的容器
5.启动和停止容器的操作
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前的容器
6.其他常用命令
1.查看日志
docker logs -tf --tail number 容器id #number:数量
2.查看容器中进程信息
docker top 容器id
3.查看容器的元数据
docker inspect 容器id
4.进入运行的容器
docker exec -it 容器id /bin/bash
docker attach 容器id
# docker exec # 进入容器后开启一个新的终端,可以在里面操作
# docker attach # 进入容器正在执行的终端,不会启动新的进程
5.容器中拷贝文件到主机
docker cp 容器id:容器内路径 目的地主机路径
列:docker cp 7af535f807e0:/home/Test.java /home
7.查看cpu内存状态
docker stats --查看cpu状态
4.可视化
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
# 测试
[root@lqd home]# curl localhost:8088
<!DOCTYPE html
><html lang="en" ng-app="portainer">
# 外网访问 http://ip:8088
5.容器数据卷
数据同步,类似双向绑定
1.创建volume卷
docker volume create 卷名
列:docker volume create todo-db
2.容器启动挂载卷
docker run -it -v 主机目录:容器目录
-v 容器内路径 # 匿名挂载
-v 卷名:容器内路径 # 具名挂载
-v /主机路径:容器内路径 # 指定路径挂载
--mount type=volume,src=卷名,target=容器内路径 # 指定卷挂载
列:docker run -it -v /home centos /bin/bash
列:docker run -it -v cenos-jumin:/home centos /bin/bash
列:docker run -it -v /home/ceshi:/home centos /bin/bash
列:docker run -it --mount type=volume,src=todo-db,target=/home centos /bin/bash
3.查看所有volume
docker volume ls
4.查看一下这个卷
docker volume inspect 卷名
列:docker volume inspect juming-nginx
5确定挂载方式
-v 容器内路径 *# 匿名挂载
-v 卷名:容器内路径 *# 具名挂载
-v /主机路径:容器内路径 *# 指定路径挂载
6.拓展
通过 -v 容器内容路径 ro rw 改变读写权限
ro readonly # 只读
rw readwrite # 可读可写
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx
ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内容无法操作
6.DockerFile
1.DockerFile指令说明
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的, 姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤, tomcat镜像, 这个tomcat压缩包!添加内容
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 保留端口配置
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令, 可以追加命令
ONBUILD # 当构建一个被继承DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令
COPY # 类似ADD, 将我们文件拷贝到镜像中
ENV # 构建的时候设置环境变量!
2.Dockerfile制作tomcat镜像
1.准备tomcat,jdk压缩包
[root@localhost DockerFile]# ll
-rw-r--r--. 1 root root 11613392 1月 16 22:23 apache-tomcat-9.0.71.tar.gz
-rw-r--r--. 1 root root 149697219 1月 16 19:13 jdk-8u351-linux-x64.tar.gz
2.编写Dockerfile文件
官方命名Dockerfile
, build会自动寻找这个文件,就不需要-f指定了!
[root@localhost DockerFile]# vim Dockerfile
FROM centos:7 #基础镜像
MAINTAINER lqd<lqd@qq.com> #作者名称和邮箱
COPY readme.txt /usr/local/readme.txt #复制说明文档到容器内
ADD jdk-8u351-linux-x64.tar.gz /usr/local/ #添加tocat包进容器(会自动解压)
ADD apache-tomcat-9.0.71.tar.gz /usr/local/ #添加jdk包进容器(会自动解压)
RUN yum -y install vim #添加vim指令
ENV MYPATH /usr/local #指定进入容器初始目录
WORKDIR $MYPATH #指定工作目录
ENV JAVA_HOME /usr/local/jdk1.8.0_351 #配置jdk环境变量
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar #配置jdk环境变量
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.71 #配置tomcat环境变量
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.71 #配置tomcat环境变量
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin #配置tomcat环境变量
EXPOSE 8080 #配置容器开发端口
CMD /usr/local/apache-tomcat-9.0.71/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.71/logs/catalina.out #启动tomcat并且指定日志输出位置
3.构建镜像
[root@localhost DockerFile]# docker build -t mycentos-tomcat-1 .
---效果
Successfully built db7d1fb16e18
Successfully tagged mycentos-tomcat-1:latest
4.启动镜像
[root@localhost DockerFile]# docker run -d -p 8080:8080 --name lqd6 -v /DockerFile/build/test/:/usr/local/apache-tomcat-9.0.71/webapps/test -v /DockerFile/build/tomcatlogs/:/usr/local/apache-tomcat-9.0.71/logs mycentos-tomcat-1
---效果
22be58f32c940ad83f2984f6eca456de899406c20df136bc366e44ecbd85fac2
5.测试访问
[root@localhost DockerFile]# curl localhost:8080
---效果
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Apache Tomcat/9.0.71</title>
<link href="favicon.ico" rel="icon" type="image/x-icon" />
<link href="tomcat.css" rel="stylesheet" type="text/css" />
</head>
.........
6.本地编写项目
(启动容器做了卷挂载)
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
</web-app>
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>hello. xiaofan</title>
</head>
<body>
Hello World!<br/>
<%
System.out.println("-----my test web logs------");
%>
</body>
</html>
存放结构
---效果
[root@localhost DockerFile]# cd build/test/
[root@localhost test]# ls
index.jsp WEB-INF
[root@localhost test]# cd WEB-INF/
[root@localhost WEB-INF]# ls
web.xml
7.打包镜像到远程
1.发布镜像到Docker Hub
1.登录Docker Hub账户
[root@localhost WEB-INF]# docker login -u lqiandong
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
2.给镜像增加一个tag
格式:docker tag 自己的镜像名 用户名/新的镜像名:版本
[root@localhost WEB-INF]# docker tag mycentos-tomcat-1 lqiandong/centos-tomcat:1.0
3.推送镜像
[root@localhost WEB-INF]# docker push lqiandong/centos-tomcat:1.0
The push refers to repository [docker.io/lqiandong/centos-tomcat]
8399064ad91a: Pushed
7b533cfbaa2b: Pushed
a08d4b3d4894: Pushed
72eee2c41e7e: Pushed
174f56854903: Mounted from library/centos
1.0: digest: sha256:502f1a8a44ddc6fc0b49fa825ef8260e21674ce31369d7aa1428a1cf5104a3c7 size: 1373
4.拉取镜像
[root@localhost WEB-INF]# docker pull lqiandong/centos-tomcat:1.0
1.0: Pulling from lqiandong/centos-tomcat
2d473b07cdd5: Already exists
e67be6050147: Already exists
cb7236a8d386: Already exists
f8e416bbeca6: Already exists
b9d91a7bfe22: Already exists
Digest: sha256:502f1a8a44ddc6fc0b49fa825ef8260e21674ce31369d7aa1428a1cf5104a3c7
Status: Downloaded newer image for lqiandong/centos-tomcat:1.0
docker.io/lqiandong/centos-tomcat:1.0
2.发布到阿里云镜像服务
…懒得写,自行百度
8.SpringBoot微服务打包Docker镜像
1.构建SpringBoot项目
2.打包应用
3.编写Dockerfile
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]
4.构建镜像,发布运行
# 把打好的jar包和Dockerfile上传到linux
[root@localhost idea]# ll
total 16140
-rw-r--r-- 1 root root 16519871 Aug 14 17:38 demo-0.0.1-SNAPSHOT.jar
-rw-r--r-- 1 root root 122 Aug 14 17:38 Dockerfile
[root@localhost idea]# docker build -t springboot-hell .
Sending build context to Docker daemon 16.52MB
Step 1/5 : FROM java:8
8: Pulling from library/java
5040bd298390: Pull complete
fce5728aad85: Pull complete
76610ec20bf5: Pull complete
60170fec2151: Pull complete
e98f73de8f0d: Pull complete
11f7af24ed9c: Pull complete
49e2d6393f32: Pull complete
bb9cdec9c7f3: Pull complete
Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
Status: Downloaded newer image for java:8
---> d23bdf5b1b1b
Step 2/5 : COPY *.jar /app.jar
---> d4de8837ebf9
Step 3/5 : CMD ["--server.port=8080"]
---> Running in e3abc66303f0
Removing intermediate container e3abc66303f0
---> 131bb3917fea
Step 4/5 : EXPOSE 8080
---> Running in fa2f25977db7
Removing intermediate container fa2f25977db7
---> d98147377951
Step 5/5 : ENTRYPOINT ["java", "-jar", "/app.jar"]
---> Running in e1885e23773b
Removing intermediate container e1885e23773b
---> afb6b5f28a32
Successfully built afb6b5f28a32
Successfully tagged springboot-hell:latest
# 查看镜像
[root@iZ2zeg4ytp0whqtmxbsqiiZ idea]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
springboot-hell latest afb6b5f28a32 14 seconds ago 660MB
tomcat latest 2ae23eb477aa 8 days ago 647MB
redis 5.0.9-alpine3.11 3661c84ee9d0 3 months ago 29.8MB
java 8 d23bdf5b1b1b 3 years ago 643MB
# 运行容器
[root@localhost idea]# docker run -d -P --name xiaofan-springboot-web springboot-hell
fd9a353a80bfd61f6930c16cd92204532bfd734e003f3f9983b5128a27b0375e
# 查看运行起来的容器端口(因为我们启动的时候没有指定)
[root@localhost idea]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd9a353a80bf springboot-hell "java -jar /app.jar …" 9 seconds ago Up 8 seconds 0.0.0.0:32779->8080/tcp xiaofan-springboot-web
# 本地访问1
[root@localhost idea]# curl localhost:32779
{"timestamp":"2020-08-14T09:42:57.371+00:00","status":404,"error":"Not Found","message":"","path":"/"}
# 本地访问2
[root@localhost idea]# curl localhost:32779/hello
hello, liuqiandong
# 远程访问(开启阿里云上的安全组哦