uname -r: 显示正在使用的内核版本
#系统内核是3.10以上版本
[root@VM-0-17-centos /]# uname -r
3.10.0-514.26.2.el7.x86_64
#系统版本(买阿里云服务器的时候可以看到)
[root@VM-0-17-centos ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
去看Docker的帮助文档:https://docs.docker.com/engine/install/
#1、卸载旧的版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#2、需要的安装包
yum install -y yum-utils
#3、设置镜像的仓库
yum-config-manager \
--add-repo \
#默认是国外的,使用起来非常慢,建议使用国内的镜像地址。
https://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
#docker-ce社区版的 docker-ee企业版的
yum install docker-ce docker-ce-cli containerd.io
在安装之前,先clear,然后更新软件包索引,使用 yum makecache fast
命令
安装好之后:
#5、启动Docker
systemctl start docker
docker run hello -world
[root@VM-0-17-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 7 months ago 13.3kB
#1.卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
#2.删除资源(/var/lib/docker 为docker的默认工作路径)
rm -rf /var/lib/docker
#配置使用
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://j6swlks2.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
1.docker有比虚拟机更少的抽象层
2.docker利用的是宿主主机的内核,vm需要是Guest OS。
所以说,新建一个容器的时候,docket不需要虚拟机一样重新加载一个操作系统内核,避免引导操作。虚拟机加载Guest OS是分钟级别的,而docker是利用宿主主机的操作系统,省略了这个复杂的过程,启动是秒级的。
Docker上面可以直接运行App Bins/Libs这些程序,不用先构建虚拟机。
docker version #显示docker的版本信息
docker info #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help #帮助命令
帮助文档的地址:https://docs.docker.com/reference/
[root@VM-0-17-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 7 months ago 13.3kB
#解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
#可选项
-a, --all #列出所有的镜像
-f #不常用
-q, --quiet #只显示镜像的id
#搜素命令
[root@VM-0-17-centos ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 9790 [OK]
mariadb MariaDB is a community-developed fork of MyS…
3572 [OK]
#可选项,通过收藏来过滤
--filter=STARS=3000 #搜索出收藏大于3000的
docker pull --help
#下载镜像docker pull镜像名[:tag]
[root@VM-0-17-centos ~]# docker pull mysql
Using default tag: latest #如果不写tag,则默认是latest(最新的)
latest: Pulling from library/mysql
6ec8c9369e08: Pull complete #分层下载,docker images的核心
177e5de89054: Pull complete
ab6ccb86eb40: Pull complete
e1ee78841235: Pull complete
09cd86ccee56: Pull complete
78bea0594a44: Pull complete
caf5f529ae89: Pull complete
cf0fc09f046d: Pull complete
4ccd5b05a8f6: Pull complete
76d29d8de5d4: Pull complete
8077a91f5d16: Pull complete
922753e827ec: Pull complete
Digest: sha256:fb6a6a26111ba75f9e8487db639bc5721d4431beba4cd668a4e922b8f8b14acc #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址
#以下两个命令是等价的
docker pull mysql
docker pull docker.io/library/mysql:latest
#指定版本下载
删除时,可以通过镜像的id,将其删除,或者通过镜像的名字将其删除。
docker rmi -f #镜像id/镜像名字 #删除指定镜像
docker rmi -f #镜像1id 镜像2id 镜像3id #删除多个镜像
docker rmi -f $(docker images -aq) #删除全部镜像
说明:有了镜像才能创建容器,因为学了linux,所以我们下载一个centos镜像来测试学习。(在docker里面再装一个容器,来充当虚拟机。)
docker pull centos #不加版本号,默认为下载最新版本的
docker run [可选参数] image
#参数说明
--name="Name" #容器名字,来区分容器 如:tomcat01、tomcat02
-d #后台方式运行
-it #使用交互方式,进入容器查看内容
-p 容器端口 #指定容器的端口如: -p 8080
-p 主机端口:容器端口 #主机映射(常用,如:-p 8080:8080)
-p 主机ip:主机端口:容器端口 #主机端口
-P (大写P) #随机指定端口
#测试,启动并进入容器
[root@VM-0-17-centos ~]# docker run -it centos /bin/bash
[root@0a0e5f10a104 /]#
[root@70a08da8dfcd /]# ls #查看容器内部的centos,基础版本,里面很多命令是不完善的
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
#从容器中退回主机
[root@70a08da8dfcd /]# exit
exit
[root@VM-0-17-centos ~]# ls
1.jpg index.html
#docker ps 命令
#列出当前正在运行的容器
-a #列出当前正在运行的容器+历史运行的容器
-n=容器个数 #显示最近创建的容器
-q #只显示容器的编号
exit #直接停止容器并退出
Ctrl + P+ Q #容器不停止,直接退出
docker rm 容器id #删除指定容器,不能删除正在运行的容器,如果要强制删除,用 rm -f
docker rm -f $(docker ps -aq) #删除所有容器(查出所有容器的id,然后递归删除)
docker ps -a -q|xargs docker rm #删除所有的容器
Tip:使用管道操作符“|”可以把一个命令的标准输出传送到另一个命令的标准输入中,连续的|意味着第一个命令的输出为第二个命令的输入,第二个命令的输入为第一个命令的输出,依次类推。
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止一个正在运行的容器
docker kill 容器id #暴力删除(杀掉)一个容器
#命令docker run -d 镜像名
docker run -d centos
#发现docker ps 发现centos停止了。
#常见的问题,docker容器使用后台运行,就必须要有一个前台进程,dockert发现没有应用,就会自动停止。
nginx,容器启动后发现自己没有提供服务,就会立刻停止,就是没有程序了。
docker logs --help #查看日志相关的指令
docker logs -f -t --tail 日志条数( 想要显示的) 容器id #查看指定容器的日志
在查询后发现没有日志,可进行如下操作:
#自己写一段shell脚本
[root@VM-0-17-centos ~]# docker run -d centos /bin/sh -c "while true;do echo labixiaoxin;sleep 1;done"
#查找写入脚本的容器id
[root@VM-0-17-centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
680eb45241f5 centos "/bin/sh -c 'while t…" 6 seconds ago Up 5 seconds gallant_poitras
28ab8b7d5be1 centos "/bin/bash" 23 minutes ago Up 23 minutes competent_carson
#显示日志
-tf #显示日志
--tail number #显示日志条数
docker top --help #帮助文档
docker top 容器id #查看指定容器中的进程信息
运行结果:
Tip:以后查杀进程的时候就可以用此命令,先将进程查出来,然后有针对性的进行查杀。
docker inspect --help #帮助文档
docker inspect 容器id
#我们通常容器都是使用后台方式运行的,如果我们需要进入容器,修改一些配置,就可以以下的方法
#方式一(进入容器后开启一个新的终端,可以在里面操作)(常用)
docker exec -it 容器id bashshell #命令格式
#测试
[root@VM-0-17-centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
680eb45241f5 centos "/bin/sh -c 'while t…" 2 days ago Up 2 days gallant_poitras
28ab8b7d5be1 centos "/bin/bash" 2 days ago Up 2 days competent_carson
[root@VM-0-17-centos ~]# docker exec -it 680eb45241f5 /bin/bash
[root@680eb45241f5 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@680eb45241f5 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Aug05 ? 00:00:36 /bin/sh -c while true;do echo labixiaoxin;sleep 1;done
root 31793 0 0 15:37 pts/0 00:00:00 /bin/bash
root 31824 1 0 15:37 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root 31825 31793 0 15:37 pts/0 00:00:00 ps -ef
#方式二(进入容器中正在执行的终端,不会启动新的进程)
docker attach 容器id
#测试
[root@VM-0-17-centos ~]# docker attach 28ab8b7d5be1
docker cp 容器id:容器内的路径 目的主机的路径
#测试
#查看当前主机目录下
[root@VM-0-17-centos home]# ls
xuyao
[root@VM-0-17-centos home]# touch labixiaoxin.java
[root@VM-0-17-centos home]# ls
labixiaoxin.java xuyao
[root@VM-0-17-centos home]# docker cp
"docker cp" requires exactly 2 arguments.
See 'docker cp --help'.
Usage: docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
#进入docker容器内部
Copy files/folders between a container and the local filesystem
[root@VM-0-17-centos home]# docker attach 0059fcba8979
[root@0059fcba8979 /]# cd /home
[root@0059fcba8979 home]# ls
[root@0059fcba8979 home]# touch test.java
[root@0059fcba8979 home]# exit
exit
[root@VM-0-17-centos home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
680eb45241f5 centos "/bin/sh -c 'while t…" 3 days ago Up 3 days gallant_poitras
[root@VM-0-17-centos home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0059fcba8979 centos "/bin/bash" 10 minutes ago Exited (0) 32 seconds ago focused_lamarr
680eb45241f5 centos "/bin/sh -c 'while t…" 3 days ago Up 3 days gallant_poitras
f49dae58a883 centos "/bin/sh -c 'while t…" 3 days ago Exited (0) 3 days ago brave_beaver
d20d877b8f4f centos "/bin/sh '-cwhile tu…" 3 days ago Exited (2) 3 days ago dreamy_newton
c665202a1c02 centos "/bin/sh '-Cwhile tu…" 3 days ago Exited (2) 3 days ago recursing_cohen
20f235abf2a0 centos "/bin/sh '-Cwhile tu…" 3 days ago Exited (2) 3 days ago gifted_moser
acf68cb43378 centos "/bin/bash" 3 days ago Exited (0) 3 days ago
#将这个文件拷贝出来到主机上
[root@VM-0-17-centos home]# docker cp acf68cb43378:/home/test.java /home
Error: No such container:path: acf68cb43378:/home/test.java
[root@VM-0-17-centos home]# docker cp 0059fcba8979:/home/test.java .home
[root@VM-0-17-centos home]# ls
labixiaoxin.java xuyao
#拷贝是一个手动过程,未来我们将通过-v(数据卷的技术)实现自动同步
docker中的命令特别多,上面写的那些是常用的。
在另一篇博客里面会有常用命令的总结,可以当帮助文档来看
tip:Nginx 是一个高性能的HTTP和反向代理web服务器,也可以做负载均衡,同时也提供了IMAP/POP3/SMTP服务
$ docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx
步骤:
- 1 搜索镜像 search (建议去docker hub上去找,上面有帮助文档)
- 2 下载拉取镜像 pull
#1.寻找镜像
[root@VM-0-17-centos ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 13580 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1857 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 782 [OK]
linuxserver/nginx An Nginx container, brought to you by LinuxS… 126
bitnami/nginx Bitnami nginx Docker Image 88 [OK]
tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 86 [OK]
jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 76
alfg/nginx-rtmp NGINX, nginx-rtmp-module and FFmpeg from sou… 72 [OK]
nginxdemos/hello NGINX webserver that serves a simple page co… 58 [OK]
jlesage/nginx-proxy-manager Docker container for Nginx Proxy Manager 53 [OK]
nginx/nginx-ingress NGINX Ingress Controller for Kubernetes 37
privatebin/nginx-fpm-alpine PrivateBin running on an Nginx, php-fpm & Al… 31 [OK]
schmunk42/nginx-redirect A very simple container to redirect HTTP tra… 18 [OK]
nginxinc/nginx-unprivileged Unprivileged NGINX Dockerfiles 16
nginx/nginx-prometheus-exporter NGINX Prometheus Exporter 14
raulr/nginx-wordpress Nginx front-end for the official wordpress:f… 13 [OK]
centos/nginx-112-centos7 Platform for running nginx 1.12 or building … 13
centos/nginx-18-centos7 Platform for running nginx 1.8 or building n… 13
blacklabelops/nginx Dockerized Nginx Reverse Proxy Server. 13 [OK]
mailu/nginx Mailu nginx frontend 7 [OK]
sophos/nginx-vts-exporter Simple server that scrapes Nginx vts stats a… 7 [OK]
bitwarden/nginx The Bitwarden nginx web server acting as a r… 7
bitnami/nginx-ingress-controller Bitnami Docker Image for NGINX Ingress Contr… 6 [OK]
wodby/nginx Generic nginx 1 [OK]
ansibleplaybookbundle/nginx-apb An APB to deploy NGINX
#2.下载(拉取)镜像
[root@VM-0-17-centos ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
bf5952930446: Pull complete
bf5952930446: Pull complete
ba755a256dfe: Pull complete
c57dd87d0b93: Pull complete
d7fbf29df889: Pull complete
1f1070938ccd: Pull complete
Digest: sha256:36b74457bccb56fbf8b05f79c85569501b721d4db813b684391d63e02287c0b2
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
#3.检查镜像是否下载成功(第一行可以看到这里已经下载镜像成功)
[root@VM-0-17-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 08393e824c32 4 days ago 132MB
centos latest 831691599b88 7 weeks ago 215MB
hello-world latest bf756fb1ae65 7 months ago 13.3kB
#4.启动镜像
#可以用于映射的端口号范围:1024~65535
[root@VM-0-17-centos ~]# docker run -d --name nginx01 -p:8080:80 nginx
5888890df91ab5fb705b661d68d4d47bb8a24bd633d9acba33b2000c7a6dc8ff
#5.测试下看是否可以访问,进入容器
#-d:后台运行 --name:给容器命名 -p:宿主机端口:容器内部端口
[root@VM-0-17-centos ~]# docker run -d --name nginx01 -p:8080:80 nginx
5888890df91ab5fb705b661d68d4d47bb8a24bd633d9acba33b2000c7a6dc8ff
[root@VM-0-17-centos ~]# curl localhost:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
#6.进入容器
[root@VM-0-17-centos ~]# docker exec -it nginx01 /bin/bash
root@08393e824c32:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@08393e824c32:/# cd /etc/nginx
root@08393e824c32:/etc/nginx# ls
conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf
从公网访问nginx web服务器成功:
端口暴露的概念:
目前存在的问题:每次改动nginx配置文件,都需要进入容器内部,比较麻烦。
解决办法:在容器外部提供一个映射路径,达到在容器内徐IG艾文静哀鸟鸣,容器内部可以自动修改。
可以在容器外部文件,容器内部就可以自动
1.构建springboot项目
2.打包应用
3.编写dockerfile
4.构建镜像docker build -t 镜像名 .
5.发布运行
使用了Docker之后,将项目打包成镜像发布到公有云上就可,给别人交付的就是一个镜像。
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
然后将jar包和dockerfile文件
放到你的docker容器中自己创建的目录下
图中我是在root下面创建了一个dockerDome的目录,然后把jar包和dockerfile文件
两个文件都放在了这下面:
docker build -t 镜像名 .
[root@VM-0-17-centos ~]# docker rm -f $(docker ps -qa)
e541c242d707
0b7f86792ec1
5888890df91a
680eb45241f5
[root@VM-0-17-centos ~]# clear
[root@VM-0-17-centos ~]# ls
1.jpg dockerDome index.html
[root@VM-0-17-centos ~]# cd dockerDome
[root@VM-0-17-centos dockerDome]# ls
Dockerfile example-0.0.1-SNAPSHOT.jar
[root@VM-0-17-centos dockerDome]# ll
total 16152
-rw-r--r-- 1 root root 112 Aug 9 19:21 Dockerfile
-rw-r--r-- 1 root root 16514158 Aug 9 18:12 example-0.0.1-SNAPSHOT.jar
[root@VM-0-17-centos dockerDome]# docker build -t xuyao11 .
Sending build context to Docker daemon 16.52MB
Step 1/5 : FROM java:8
---> d23bdf5b1b1b
Step 2/5 : COPY *.jar /app.jar
---> 528cdf2035cc
Step 3/5 : CMD ["--server.port=8080"]
---> Running in de567df4c4f8
Removing intermediate container de567df4c4f8
---> b486cdec42d0
Step 4/5 : EXPOSE 8080
---> Running in 7801040c4fc6
Removing intermediate container 7801040c4fc6
---> a0b4c73e2ba0
Step 5/5 : ENTRYPOINT ["java","-jar","/app.jar"]
---> Running in e2cf0220926f
Removing intermediate container e2cf0220926f
---> 18b03ae0e280
Successfully built 18b03ae0e280
Successfully tagged xuyao11:latest
[root@VM-0-17-centos dockerDome]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xuyao11 latest 18b03ae0e280 42 seconds ago 660MB
<none> <none> 41d33a4a30a6 37 minutes ago 643MB
nginx latest 08393e824c32 4 days ago 132MB
centos latest 831691599b88 7 weeks ago 215MB
hello-world latest bf756fb1ae65 7 months ago 13.3kB
java 8 d23bdf5b1b1b 3 years ago 643MB
[root@VM-0-17-centos dockerDome]# docker run -d -p --name xuyao-springboot-web xuyao11
docker: invalid publish opts format (should be name=value but got '--name').
See 'docker run --help'.
[root@VM-0-17-centos dockerDome]# docker run -d -P --name xuyao-springboot-web xuyao11
67e7a4b3eb074dec2c7274688ebf1199a35ecb3d4f970d4df689322bfac6eb83
[root@VM-0-17-centos dockerDome]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
67e7a4b3eb07 xuyao11 "java -jar /app.jar …" 14 seconds ago Up 13 seconds 0.0.0.0:32768->8080/tcp xuyao-springboot-web
在cmd中测试看是否成功:
在IDEA中创建Dockerfile文件,写脚本:
成功将jar包打包成镜像:
tips:如果有多个镜像,如何处理维护? 解决方法:Docker Compose(docker 编排服务) Docker Swarm(集群部署 )CI/CD之Jenkins