docker 安装相关操作
# 安装Docker CE
https://www.cnblogs.com/zlnp/p/15384728.html
镜像加速地址
https://3zne2w5t.mirror.aliyuncs.com
# 安装centos
# 修改centos的时区【手动】
1.进入容器
# 没有新建容器,启动并进入容器内部
docker run -it 【容器名】 /bin/bash
# 容器正在运行,进入容器
docker exec -it 【容器名】/bin/bash
2.设置时区
# 1、CentOS6、Ubuntu16(有效)
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 2、CentOS7、RHEL7、Scientific Linux 7、Oracle Linux 7 最好的方法是使用timedatectl命令(未成功)
timedatectl list-timezones |grep Shanghai #查找中国时区的完整名称
Asia/Shanghai
timedatectl set-timezone Asia/Shanghai #其他时区以此类推
# 3、直接手动创建软链接(有效)
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 修改centos的时区 【自动版】
# 1.编写docker file
FROM centos
# 修改为上海时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
CMD echo finish
2
3
4
注意: cmd
一般放在末尾,只是用一次,因为 cmd
会被覆盖前面的 run
, cmd
, envPoint
命令所覆盖
当执行 cp
命令,需要人为的y/n时,可以使用 /bin/cp
,来强制yes
# 2.创建镜像
docker build -f dockerfile -t 镜像名:版本号 .
# -f :指定要使用的Dockerfile路径;
# --tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
2
3
# 3. 启动并进入镜像(退出会自动关闭容器)
docker run -it 镜像名:版本号 /bin/bash
# -i: 以交互模式运行容器,通常与 -t 同时使用;
# -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
2
3
# 安装jdk
# linux 手动安装 jdk
下载jdk
先去官网找到jdk1.8:点我快速进入官网 (opens new window)
使用ftp 将我们的 jdk压缩包 放在指定目录(我放在 /opt/java目录下)
事先使用 'mkdir /opt/java' 创建好文件夹
解压jdk
我们可以在指定的目录下解压文件(/opt/java)
tar -zxvf jdk-8u211-linux-x64.tar.gz
4.配置环境变量
在 /etc/profile 下添加
export JAVA_HOME=/opt/software/jdk1.8.0_201
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
2
3
# docker 自动版
# 1.首先编写dockerfile 文件
# 2.将需要的安装包放在dockerfile文件同级目录
# 根据镜像2.1为基础
FROM mycentos:2.1
# 创建java目录
RUN mkdir -p /usr/local/java/jdk
# 添加并解压 jdk
ADD jdk-8u201-linux-x64.tar.gz /usr/local/java/jdk
# 创建软连接
#RUN ln -s /opt/java/jdk1.8.0_201 /usr/local/java/jdk
# 设置jdk环境变量
ENV JAVA_HOME /usr/local/java/jdk/jdk1.8.0_201
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH :${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH ${JAVA_HOME}/bin:$PATH
CMD echo finish
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
解释
mkdir -p xx/yy
#好处就是一次可以创建多级文件夹,若xx文件夹不存在,则先创建xx文件夹,然后在xx文件夹下创建yy文件夹
ADD 源目录(当前目录) 容器下的目录
# 将源目录的文件 添加到容器指定目录
ENV
#配置环境变量
2
3
4
5
6
7
# 3. 利用编写好的dockerfile 创建镜像
docker build -f dockerfile -t mycentos_jdk:3.0 .
# 安装 tomcat
# 手动安装tomcat
# 1. 去官网下载tomcat(这一步自行下载,还有提前安装好jdk)
# 2.使用 xftp 将文件移入centos 内部
# 3. 去指定的目录解压tomcat
tar -zxvf apache-tomcat-8.5.59.tar.gz
# 4. 启动tomcat
/opt/docker_tomcat/apache-tomcat-8.5.59/bin/startup.sh
# 5.关闭tomcat
/opt/docker_tomcat/apache-tomcat-8.5.59/bin/shutdown.sh
也可以将这两句命令封装成脚本,并赋予可执行权限
脚本封装命令
# 创建tomcat启动脚本文件
vim tomcat_startup.sh
# 输入
sh /opt/docker_tomcat/apache-tomcat-8.5.59/bin/startup.sh
# 保持退出
exc
:wq
# 创建tomcat关闭脚本文件
vim tomcat_shutdown.sh
# 输入
sh /opt/docker_tomcat/apache-tomcat-8.5.59/bin/startup.sh
# 保持退出
exc
:wq
# 赋予文件可执行权限
chmod +x tomcat_shutdown.sh
chmod +x tomcat_startup.sh
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 使用dockerfile 安装 tomcat
1.前提条件:将jdk 和tomcat 安装包 提前放在dockerfile 文件 同级目录下
2.准备dockerfile:
FROM centos
# 作者信息
MAINTAINER ggBall<1667834841@qq.com>
# 添加 tomcat 和 jdk的安装包
ADD apache-tomcat-8.5.59.tar.gz /usr/local
ADD jdk-8u201-linux-x64.tar.gz /usr/local
ENV MYPATH /usr/local
# 设置 指令的工作目录
WORKDIR $MYPATH
# 设置环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_201
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.59
ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.59
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-8.5.59/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.59/bin/logs/catalina.out
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
解释
WORKDIR指令:设置Dockerfile中的任何RUN,CMD,ENTRPOINT,COPY和ADD指令的工作目录。如果WORKDIR指 定的目录不存在,即使随后的指令没有用到这个目录,都会创建。
EXPOSE命令:只是声明了容器应该打开的端口并没有实际上将它打开!
也就是说,如果你不用-p或者-P中指定要映射的端口,你的容器是不会映射端口出去的,从而我们知道我们是没有办法在Dockerfile里面进行端口映射的,我们只能在容器启动的时候或者在docker-compose文件中使用
ports
来指定将要映射的端口。那我们的EXPOSE能用来干什么呢?第一点就是写在Dockerfile中进行声明,能让运维人员或者后来者知道我们开启了容器的哪些端口。还有一点就是,当我们声明了EXPOSE端口之后,我们使用-P命令进行随机映射的时候,是会对这个端口进行映射的。比如说我们现在对一个tomcat容器进行EXPOSE 9999声明,那么我们进行-P随机映射的时候是会对9999端口进行映射的。
构建镜像
docker build -f dockerfile -t mycentos_tomcat:4.0 .
1将镜像后台运行成容器
docker run -p 8887:8080 -d mycentos_tomcat:4.0 #格式 docker run -p hostPort:containerPort -d 镜像名:版本号 # -p 宿主机端口:容器端口 将容器端口映射到宿主机端口 # -d 使容器后台运行
1
2
3
4
5
6
可以看到 我们可以通过8887端口访问到容器内的tomcat
# 安装nginx
# linux 安装 nginx
- 安装依赖
Nginx的安装依赖于以下三个包,意思就是在安装Nginx之前首先必须安装一下的三个包,注意安装顺序如下:
//1 SSL功能需要openssl库,直接通过yum安装:
yum install openssl
//2 gzip模块需要zlib库,直接通过yum安装:
yum install zlib
//3 rewrite模块需要pcre库,直接通过yum安装:
yum install pcre
2
3
4
5
6
- 安装Nginx依赖:
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
可以用yum 一键安装Nginx 和手动安装nginx
# yum 方式
# 安装nginx yum install nginx # 启动 nginx service nginx start
1
2
3
4# 手动方式
# 1.下载并解压安装包 # 创建一个文件夹 cd /usr/local mkdir nginx cd nginx # 下载tar包 wget http://nginx.org/download/nginx-1.13.7.tar.gz tar -xvf nginx-1.13.7.tar.gz # 2.安装nginx # 进入nginx目录 cd /usr/local/nginx # 进入目录 cd nginx-1.13.7 # 执行命令 ./configure # 执行make命令 make # 执行make install命令 make install # 3. 配置nginx.conf # 打开配置文件 修改配置 vi /usr/local/nginx/conf/nginx.conf /usr/local/nginx/sbin/nginx -s reload # 如果出现报错:nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed # 则运行: /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf # 再次启动即可!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28设置 自定义端口 最好不要是80
成功!
# 注意
一般服务器不对外开放端口,可能需要开放端口
//查看已开放的端口:
firewall-cmd --list-ports
//默认80端口加入防火墙访问白名单中:
firewall-cmd --permanent --zone=public --add-port=8883/tcp
使用命令使其生效:
firewall-cmd --reload
2
3
4
5
6
# dockerfile 编辑 含有nginx的镜像
1,安装nginx
docker pull nginx
2,随便启动一下nginx,测试是否安装成功
a,启动nginx
sudo docker run --name nginx-test -p 8081:80 -d nginx
执行后,返回一串代码表示启动安装成功
3,修改nginx配置,把docker里面的nginx相关配置指向方便修改的目录
a,创建目录(自行创建详细目录)
mkdir -p /opt/docker_nginx/www/html /opt/docker_nginx/logs /opt/docker_nginx/conf /opt/docker_nginx/conf.d
b,复制docker里面的nginx配置到以上目录
执行docker ps,然后复制containerId,并执行复制nginx.conf
sudo docker cp 6e22d0ea44c2:/etc/nginx/nginx.conf /opt/docker_nginx/conf
sudo docker cp 6d5e182cf38d:/etc/nginx/conf.d/default.conf /opt/docker_nginx/conf.d/default.conf
4,关闭并移除之前的nginx容器
#查看所有的容器编号
docker ps -l
#移除容器
docker rm <container ID>
#停止容器
docker container stop <container ID>
5,正式启动nginx容器
sudo docker run -d -p 8884:80 \
--name nginx-docker \
-v /opt/docker_nginx/www/html:/usr/share/nginx/html \
-v /opt/docker_nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /opt/docker_nginx/logs:/var/log/nginx \
-v /opt/docker_nginx/conf.d:/etc/nginx/conf.d \
nginx
执行后,返回一串代码表示启动成功
6,在/usr/local/docker_nginx/www/html目录下,创建index.html,然后直接访问即可
http://xxxxxx:8081/index.html
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 安装node
# 1. 获取node
wget https://npm.taobao.org/mirrors/node/v14.16.0/node-v14.16.0-linux-x64.tar.xz
# 2.解压
***.tar.xz格式文件需要两部解压步骤
1>xz -d node-v14.16.0-linux-x64.tar.xz
2>tar -xvf node-v14.16.0-linux-x64.tar
# 3.配置环境目录
ln -s /usr/local/node/node-v14.16.0-linux-x64/bin/node /usr/bin/node
ln -s /usr/local/node/node-v14.16.0-linux-x64/bin/npm /usr/bin/npm
其中/usr/local/node为node安装目录
删除软连接
rm -rf /usr/bin/node
rm -rf /usr/bin/npm
# 4.验证
node -v
输出版本号v8.11.2即说明已完成
# 卸载node
# 1.自带工具删除
yum remove nodejs npm -y
# 2.手动删除残留
进入 /usr/local/lib 删除所有 node 和 node_modules文件夹
进入 /usr/local/include 删除所有 node 和 node_modules 文件夹
进入 /usr/local/bin 删除 node 的可执行文件node和npm
检查 ~ 文件夹里面的"local" "lib" "include" 文件夹,然后删除里面的所有 "node" 和 "node_modules" 文件夹
完成。
# 安装redis
网上搜索了一筐如何在Linux下安装部署Redis的文章,各种文章混搭在一起勉强安装成功了。自己也记录下,方便后续安装时候有个借鉴之处。
- Redis版本 5.0.4
- 服务器版本 Linux CentOS 7.6 64位
# 下载Redis
进入官网找到下载地址 https://redis.io/download
右键Download按钮,选择复制链接。 进入到Xshell控制台(默认当前是root根目录),输入wget 将上面复制的下载链接粘贴上,如下命令:
wget http:``//download.redis.io/releases/redis-5.0.7.tar.gz
敲入回车键执行后如下图:
等待下载完成。
# 解压并安装Redis
解压
下载完成后需要将压缩文件解压,输入以下命令解压到当前目录
tar -zvxf redis-5.0.7.tar.gz
解压后在根目录上输入ls 列出所有目录会发现与下载redis之前多了一个redis-5.0.7.tar.gz文件和 redis-5.0.7的目录。
移动redis目录
一般都会将redis目录放置到 /usr/local/redis目录,所以这里输入下面命令将目前在/root目录下的redis-5.0.7文件夹更改目录,同时更改文件夹名称为redis。
mv /opt/redis/redis-5.0.7 /usr/local/redis
cd 到/usr/local目录下输入ls命令可以查询到当前目录已经多了一个redis子目录,同时/root目录下已经没有redis-5.0.7文件夹
编译
cd到/usr/local/redis目录,输入命令make执行编译命令,接下来控制台会输出各种编译过程中输出的内容。
make
最终运行结果如下:
安装
输入以下命令
make PREFIX=/usr/local/redis install
这里多了一个关键字 PREFIX=
这个关键字的作用是编译的时候用于指定程序存放的路径。比如我们现在就是指定了redis必须存放在/usr/local/redis目录。假设不添加该关键字Linux会将可执行文件存放在/usr/local/bin目录,
库文件会存放在/usr/local/lib目录。配置文件会存放在/usr/local/etc目录。其他的资源文件会存放在usr/local/share目录。这里指定号目录也方便后续的卸载,后续直接rm -rf /usr/local/redis 即可删除redis。
执行结果如下图:
# 启动redis
根据上面的操作已经将redis安装完成了。在目录/usr/local/redis 输入下面命令启动redis
./bin/redis-server& ./redis.conf
上面的启动方式是采取后台进程方式,下面是采取显示启动方式(如在配置文件设置了daemonize属性为yes则跟后台进程方式启动其实一样)。
./bin/redis-server ./redis.conf
两种方式区别无非是有无带符号&的区别。 redis-server 后面是配置文件,目的是根据该配置文件的配置启动redis服务。redis.conf配置文件允许自定义多个配置文件,通过启动时指定读取哪个即可。
# redis.conf配置文件
在目录/usr/local/redis下有一个redis.conf的配置文件。我们上面启动方式就是执行了该配置文件的配置运行的。我么可以通过cat、vim、less等Linux内置的读取命令读取该文件。
也可以通过redis-cli命令进入redis控制台后通过CONFIG GET * 的方式读取所有配置项。 如下:
redis-cli``CONFIG GET *
回车确认后会将所有配置项读取出来,如下图
这里列举下比较重要的配置项
配置项名称 | 配置项值范围 | 说明 |
---|---|---|
daemonize | yes、no | yes表示启用守护进程,默认是no即不以守护进程方式运行。其中Windows系统下不支持启用守护进程方式运行 |
port | 指定 Redis 监听端口,默认端口为 6379 | |
bind | 绑定的主机地址,如果需要设置远程访问则直接将这个属性备注下或者改为bind * 即可,这个属性和下面的protected-mode控制了是否可以远程访问 。 | |
protected-mode | yes 、no | 保护模式,该模式控制外部网是否可以连接redis服务,默认是yes,所以默认我们外网是无法访问的,如需外网连接rendis服务则需要将此属性改为no。 |
timeout | 300 | 当客户端闲置多长时间后关闭连接,如果指定为 0,表示关闭该功能 |
loglevel | debug、verbose、notice、warning | 日志级别,默认为 notice |
databases | 16 | 设置数据库的数量,默认的数据库是0。整个通过客户端工具可以看得到 |
rdbcompression | yes、no | 指定存储至本地数据库时是否压缩数据,默认为 yes,Redis 采用 LZF 压缩,如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变的巨大。 |
dbfilename | dump.rdb | 指定本地数据库文件名,默认值为 dump.rdb |
dir | 指定本地数据库存放目录 | |
requirepass | 设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过 AUTH | |
maxclients | 0 | 设置同一时间最大客户端连接数,默认无限制,Redis 可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息。 |
maxmemory | XXX | 指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先尝试清除已到期或即将到期的 Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis 新的 vm 机制,会把 Key 存放内存,Value 会存放在 swap 区。配置项值范围列里XXX为数值。 |
这里我要将daemonize改为yes,不然我每次启动都得在redis-server命令后面加符号&,不这样操作则只要回到Linux控制台则redis服务会自动关闭,同时也将bind注释,将protected-mode设置为no。 这样启动后我就可以在外网访问了。
更改方式:
vim /usr/local/redis/redis.conf
通过 /daemonize 查找到属性,默认是no,更改为yes即可。 (通过/关键字查找出现多个结果则使用 n字符切换到下一个即可,查找到结果后输入:noh退回到正常模式)
如下图:
其他两个属性也是同样方式查找和编辑即可。
# 查看Redis是否正在运行
1、采取查看进程方式
ps -aux | grep redis
结果如下图:
2、采取端口监听查看方式
netstat -lanp | grep 6379
结果如下图:
# redis-cli
redis-cli
是连接本地redis服务的一个命令,通过该命令后可以既然怒redis的脚本控制台。如下图
输入exit可以退出redis脚本控制台
# 关闭运行中的Redis服务
输入redis-cli
进入控制台后输入命令shutdown
即可关闭运行中的Redis服务了。如下图:
# 远程连接不上问题
如下图,已经开放了Redis服务的ip不为127.0.0.1,理论上远程客户端应该可以连接了,而且云服务器的端口号也在安全组里开放了。
后面发现是启动命令的问题,因为我比较偷懒,启动redis我都是直接输入命令
redis-server
或 redis-server&
这两种方式都是直接读取默认的配置文件启动,无非前者是显示启动后者是作为后台应用启动。我其实也很纳闷,因为我修改的就是默认的配置文件啊,我并没有重新生成新的配置文件,但是确实我输入命令 redis-server /usr/local/redis/etc/redis.conf
就是能成功,而且我输入命令redis-server& /usr/local/redis/etc/redis.conf
也是远程登录失败。
关于直接输入redis-server
不行的问题我还怀疑是不是Linux缓存问题,我重启服务器尝试下。结果还是一样的。。。哎先不纠结了 后续再去找原因吧
# 加载镜像
查询官方镜像及其版本信息
$ docker search redis
加载最新镜像
$ docker pull redis:lastest
查看本地镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/redis latest f0453552d7f2 7 days ago 98.2 MB
docker.io/mysql latest 9b51d9275906 2 weeks ago 547 MB
docker.io/tomcat latest 4e7840b49fad 3 weeks ago 529 MB
2
3
4
5
# 运行容器
启用daemon
$ docker run --name redis -p 6380:6379 -d redis --requirepass "123456"
自定义redis.conf启动
docker run -p 6379:6379 --name redis -v /opt/conf/redis/redis.conf:/etc/redis/redis.conf -v /opt/conf/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes --protected-mode no
# -p 6379:6379:把容器内的6379端口映射到宿主机6379端口
# -v /root/docker/redis/redis.conf:/etc/redis/redis.conf:把宿主机配置好的redis.conf放到容器内的这个位置中
# -v /root/docker/redis/data:/data:把redis持久化的数据在宿主机内显示,做数据备份
# redis-server /etc/redis/redis.conf:这个是关键配置,让redis不是无配置启动,而是按照这个redis.conf的配置启动
# -appendonly yes:redis启动后数据持久化
docker cp 70b3809bff11:/root/docker/redis/redis.conf /opt/conf/redis/redis.conf
2
3
4
5
6
7
查看运行状态
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3c90175b38e6 redis "docker-entrypoint..." 13 minutes ago Up 13 minutes 0.0.0.0:6380->6379/tcp kris-redis
2bbd52391bab mysql "docker-entrypoint..." 7 days ago Up 7 days 0.0.0.0:3306->3306/tcp, 33060/tcp kris-mysql
2
3
4
启用redis-cli,即redis客户端
$ docker exec -it kris-redis redis-cli
# 运行springboot项目
# 手动运行springboot项目
# 1. 准备jar包
在idea中,打开terminal,输入 mvn clean package
好了之后,我们拿到打包好的jar包
如果我们不放心,可以在我们windows内 执行 java -jar 命令 看看在本地可不可以运行,可以就进入下一步
访问接口,成功!
思考:为什么springboot一般是打包成jar包,而不是war包?
答:首先,
SpringBoot
应用是可以打包成JAR
或者WAR
形式的。但是官方文档推荐的是打包成JAR
,作为一个web应用
,为什么会推荐打包成JAR
,这是因为SpringBoot
内集成了Tomcat
服务器,当你启动SpringBoot
应用的时候,内置的Tomcat
服务器就会启动,加载web应用
。其次,WAR包的启动需要
Tomcat
或者Jetty
容器,这就在SpringBoot
会引起JAR
冲突,需要排除依赖,这样反而违背了SpringBoot
简洁的特点。JAR
包的启动入口就是main函数
。
# 2. 将jar包移入 linux系统内
# 3. 利用java -jar 项目名 启动springboot项目
# dockerfile 运行springboot项目
# 1. 准备jar包和jdk
既然我们 单独的jdk 的dockerfile 和jar 在linux上运行 都成功了,这个只是将两个结合下,那就很easy啦
在我们新建的目录下,放我们需要的的jdk和jar包
# 3. 编写dockerfile文件
FROM centos
MAINTAINER ggBall
# 创建java目录
RUN mkdir -p /usr/local/java/jdk
# 创建jar包目录
RUN mkdir -p /usr/local/java/jar
# 添加并解压 jdk
ADD jdk-8u201-linux-x64.tar.gz /usr/local/java/jdk
# 设置jdk环境变量
ENV JAVA_HOME /usr/local/java/jdk/jdk1.8.0_201
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH ${JAVA_HOME}/bin:$PATH
# 将jar包添加到容器中并更名为app.jar
ADD websockerdemo-0.0.1-SNAPSHOT.jar /usr/local/java/jar/app.jar
# 容器运行时 执行的命令
ENTRYPOINT ["java","-jar","/usr/local/java/jar/app.jar"]
# 或者将上面这句替换成下面这句
# ENTRYPOINT ["nohup","java","-jar","/usr/local/java/jar/app.jar","&"]
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
解释
1.nohup
用途:不挂断地运行命令。
语法:nohup Command [ Arg … ] [ & ]
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。
如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。
退出状态:该命令返回下列出口值:
126 可以查找但不能调用 Command 参数指定的命令。
127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。
否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。
2.&
用途:在后台运行
一般两个一起用
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 3. 构建镜像
docker build -f dockerfile -t docker_springboot:5.0 .
# 4. 运行镜像
docker run -p 7002:8881 docker_springboot:5.0
# 想后台运行 可以加上 -d 我这边只是测试下 就没加了
2
访问成功!
# 对镜像操作
# 对镜像删除的快捷操作
// 停止状态为Exited的容器
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop
// 删除状态为Exited的容器
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm
// 删除 tag名称为none的image
docker images|grep none|awk '{print $3 }'|xargs docker rmi -f
docker rmi $(docker images|grep none|awk '{print $3 }')
杀死所有正在运行的容器
docker kill $(docker ps -a -q)
删除所有已经停止的容器
docker rm $(docker ps -a -q)
删除所有未打 dangling 标签的镜像
docker rmi $(docker images -q -f dangling=true)
删除所有镜像
docker rmi $(docker images -q)
为这些命令创建别名
# ~/.bash_aliases
# 杀死所有正在运行的容器.
alias dockerkill='docker kill $(docker ps -a -q)'
# 删除所有已经停止的容器.
alias dockercleanc='docker rm $(docker ps -a -q)'
# 删除所有未打标签的镜像.
alias dockercleani='docker rmi $(docker images -q -f dangling=true)'
# 删除所有已经停止的容器和未打标签的镜像.
alias dockerclean='dockercleanc || true && dockercleani'
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# docker 操作
停止所有正在运行的容器
docker stop $(docker ps -aq)
https://www.cnblogs.com/gcgc/p/10494615.html
# 二、docker容器设置自动启动
# 启动时加--restart=always
docker run -tid --name isaler_v0.0.11 -p 8081:8080 --restart=always -v /alidata/iDocker/run/projectImages/isaler/v0.0.11/log:/usr/local/tomcat/logs isaler_v0.0.11
Flag Description
no 不自动重启容器. (默认value)
on-failure 容器发生error而退出(容器退出状态不为0)重启容器
unless-stopped 在容器已经stop掉或Docker stoped/restarted的时候才重启容器
always 在容器已经stop掉或Docker stoped/restarted的时候才重启容器
2
3
4
5
6
7
8
# 将正在运行的容器设为自启动
docker update --restart=always 容器名或容器ID
docker update --restart=always <CONTAINER ID>
将自启动的容器取消自启动
docker update --restart=no 容器名或容器ID
docker update --restart=no <CONTAINER ID>
# docker如何退出就删除容器
# 首先获取镜像
docker pull [选项] [Docker Registry地址]<仓库名>:<标签>
比如:
docker pull ubuntu:14.04
# 运行
docker run -it --rm ubuntu:14.04 bash
参数说明:
docker run 就是运行容器的命令
- *-it* :这是两个参数,一个是 -i :交互式操作,一个是 -t 终端。我们 这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终 端。
- --rm :这个参数是说容器退出后随之将其删除。默认情况下,为了排障需 求,退出的容器并不会立即删除,除非手动 docker rm, 我们这里只是随便 执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免 浪费空间。
- ubuntu:14.04 :这是指用 ubuntu:14.04 镜像为基础来启动容器。
- bash :放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的 是 bash 。
# docker启动容器之后马上又自动关闭了
# 问题现象:
centos 启动一个容器添加了-d 参数,但是docker ps 或者docker ps -a查看却已经退出了 shell>docker run -d centos a44b2b88559b68a2221c9574490a0e708bff49d88ca21f9e59d3eb245c7c0547 shell>docker ps
what ? why?
# 退出原因
1、docker容器运行必须有一个前台进程, 如果没有前台进程执行,容器认为空闲,就会自行退出 2、容器运行的命令如果不是那些一直挂起的命令( 运行top,tail、循环等),就是会自动退出 3、这个是 docker 的机制问题
# 解决方案
方案1: 网上有很多介绍,就是起一个死循环进程,让他不停的循环下去,前台永远有进程执行,那么容器就不会退出了,以centos为例 shell>docker run -d centos /bin/sh -c "while true; do echo hello world; sleep 1; done" 缺点: 命令太冗长了,还占用一个终端
方案2:
shell>docker run -dit centos /bin/bash
添加-it 参数交互运行 添加-d 参数后台运行 这样就能启动一个一直停留在后台运行的Centos了。
shell>docker ps 容器运行起来了
# 进入容器的方法:
使用exec,不要使用attach命令 attach命令就是使用现有终端,如果你要退出容器操作,那么bash结束,容器也就退出了
shell>docker exec -it <container_id> /bin/bash //新建一个bash
# vim全选,全部复制,全部删除 (opens new window)
全选(高亮显示):按esc后,然后ggvG或者ggVG
全部复制:按esc后,然后ggyG
全部删除:按esc后,然后dG
2
3
4
5
解析:
gg:是让光标移到首行,在vim才有效,vi中无效
v : 是进入Visual(可视)模式
**G :**光标移到最后一行
选中内容以后就可以其他的操作了,比如: d 删除选中内容 y 复制选中内容到0号寄存器 "+y 复制选中内容到+寄存器,也就是系统的剪贴板,供其他程序用