Docker基本操作命令及整合idea实现一键部署到云服务器

镜像和容器的关系

  • 在Dokcer里面下载的是镜像,通过镜像运行起来容器,容器是我们实际使用的软件,镜像也可以比作是软件的安装包,可以通过安装包安装出多个软件。
  • 类比java中类和对象的关系,一个类可以new出多个对象,那么一个镜像也可以创造出多个容器。
  • 镜像 -> 类
  • 容器 -> 对象

centOS安装Dokcer步骤

Docker安装命令

  1. 卸载旧版本
sudo yum remove docker \
                docker-client \
                docker-client-latest \
                docker-common \
                docker-latest \
                docker-latest-logrotate \
                docker-logrotate \
                docker-engine
  1. 省略详细步骤,在dokcer hub网站里面documention栏里可以查询到详细步骤,链接:官方安装文档

配置加速器

  1. linux中编辑docker配置文件
vi /etc/docker/daemon.json
  1. 执行命令生效
systemctl daemon-reload 
systemctl restart docker
  1. 配置阿里云镜像加速器,每个阿里云账号都分配有一个自己的镜像加速器,可以自己申请账号查看
https://ictw0m8b.mirror.aliyuncs.com

下载镜像及Docker基本操作命令

1. 搜索镜像

docker search + 镜像名

例:搜索mysql的景象

docker search mysql

2. 拉取镜像

docker pull + 镜像名

例:拉取mysql的镜像,不写版本号的话,默认拉取latest版本镜像

docker pull mysql

出现以下提示说明拉取成功:

[root@iZwz91dz3gheaq5w2jih7tZ ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
c499e6d256d6: Pull complete 
22c4cdf4ea75: Pull complete 
6ff5091a5a30: Pull complete 
2fd3d1af9403: Pull complete 
0d9d26127d1d: Pull complete 
54a67d4e7579: Pull complete 
fe989230d866: Pull complete 
3a808704d40c: Pull complete 
826517d07519: Pull complete 
69cd125db928: Pull complete 
b5c43b8c2879: Pull complete 
1811572b5ea5: Pull complete 
Digest: sha256:b69d0b62d02ee1eba8c7aeb32eba1bb678b6cfa4ccfb211a5d7931c7755dc4a8
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

上例中下载了一个mysql作为实例,从下载过程中可以看到镜像分层存储的概念,下载也是一层层的去下载的,并不是单一文件。下载过程中给出了每一层的ID的前12位,下载结束后,会显示出该镜像完整的sha256的摘要,确保下载一致性。

3. 列出所有镜像

docker images

打印结果:

[root@iZwz91dz3gheaq5w2jih7tZ ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               latest              9228ee8bac7a        10 days ago         547MB
hello-world         latest              fce289e99eb9        15 months ago       1.84kB

从左到右依次为仓库名,标签,镜像ID,创建时间,占用空间
一个镜像可以对应多个标签,如果镜像id是相同的话,那么他们对应的就是同一个镜像。
显示占用的空间和docker hub上面可能是不同的,因为docker hub上面显示的是压缩前的大小,在下载后会解压,所以显示的就是占用本地磁盘的空间大小。另一方面,因为镜像文件是多层存储结构的,可以继承和复用,所以相同的软件,可能再次下载的大小就没有那么大,会复用已经下载好的镜像的结构。

4. 删除镜像
注:删除的镜像必须没有被容器所使用,否则会提示有容器正在使用,删除容器后即可删除镜像

docker image rmi +镜像id

5. 删除容器
注:容器必须处理停止状态才可以删除,否则会提示容器正在运行中,停止后即可删除

docker rm + 容器ID

运行Docker镜像

1. 运行镜像命令

docker run --name tomcat-8080 -p 8080:8080 -d tomcat

docker run + 镜像名称:tag 指运行哪个镜像
-d 表示后台运行该容器,不会在docker页面显示当前日志、操作等
–rm 表示容器在启动后,执行停止命令后,容器就自动销毁
–name 表示给容器起一个自定义名称,比如tomcat-8080,则在查看容器时会显示这个名称
-p 表示宿主机端口指向内部端口,例子表示docker内这个容器是8080,宿主机也是8080

2. 查看正在运行的容器

docker ps

3. 查看所有容器(包含运行中和退出)

docker ps -a

4. 停止容器

docker stop +容器id或者容器名称

5. 启动已终止的容器

docker start +容器id/容器名称 

6. 进入容器内部

docker exec 

例:

docker exec -it 容器ID或者容器名 bash

7. 宿主机和容器之间交换文件

  • 从宿主机复制文件到容器
docker cp 文件名 容器名:地址

例:从宿主机复制xxx.jpg图片到tomcat容器内部ROOT文件夹内

docker cp xxx.jpg tomcat-8080:/usr/local/webapps/ROOT
  • 从容器复制文件到宿主机
docker cp 容器名:地址 文件名 宿主机地址

例:

docker cp tomcat-8080:/usr/local/tomcat/webapps/ROOT/xxx.jpg /root

8. docker 查看log日志

docker logs 容器名称/容器ID

例:

docker logs -f -t --since="2018-12-1" --tail=10 qfjy_wxam

--since     此参数指定了输出日志开始日期
-f          查看实时日志
-t          查看日志产生的日期
-tail=10    查看最后10条日志
qfjy_name   容器名称  

Docker 数据卷

通过镜像创建一个容器后,当容器被销毁后,容器内的数据将一并被删除,容器中的数据不是持久化的。

  • 数据卷是一个可供一个或多个容器使用的特殊目录
    • 数据卷可以在多个容器间共享和重用
    • 对数据卷的修改会立马生效
    • 对数据卷的更新,不会影响镜像
    • 数据卷默认会一直存在,即使容器被删除
      1. 创建数据卷
docker volume create vol-test //test公共的文件夹资源静态资源
然后在root目录下创建一个文件夹,名叫“test”
  1. 查看所有数据卷
docker volume ls
将创建的数据卷复制到自定义文件夹里面
cp test /usr/local/docker/

例:创建容器的时候挂载test文件夹到Tomcat里面去,开启命令如下:

docker run --rm -d --name tomcat-8080 -p 8080:8080 -v /usr/local/docker/test/:/usr/local/tomcat/webapps/test tomcat

-v 数据卷参数
将宿主机/usr/local/docker/test/文件夹内的内容
挂载在容器/usr/local/tomcat/webapps/test 目录下
这时候,再在浏览器里面输入http://8.129.190.221:8080/test/3.jpg,那么这个test文件夹和里面的文件都是映射的docker文件夹里面的文件

3. 查看容器绑定或挂载的文件夹地址

docker inspect redis | grep Mounts -A 10

redis为容器名称,返回的信息:

"Mounts": [
            {
                "Type": "volume",
                "Name": "f06e4ee059b5e78feb957b5d2fcefe7287309fa43cef4b431c22fbac5c178861",
                "Source": "/var/lib/docker/volumes/f06e4ee059b5e78feb957b5d2fcefe7287309fa43cef4b431c22fbac5c178861/_data",
                "Destination": "/data",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }

mysql安装步骤

1. 下载mysql

docker search mysql
docker pull mysql

2. 运行

docker run --privileged=true --restart always -p 3306:3306 --name mysql-3306 -v /usr/local/docker/mysql/conf/my.cnf:/etc/mysql/conf.d/mysqld.cnf -v /usr/local/docker/mysql/logs:/logs -v /usr/local/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
--privileged=true  提升容器权限
--restart always  开机自启
 -v /root/mysql/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf   
 -v /root/mysql/logs:/logs -v /root/mysql/data:/var/lib/mysql 
-d 代表后台运行
-- name 后面是给容器取得名字
最后面是镜像名称

3. 进入容器内部修改权限

docker exec  it mysql-3306 bash
//先自测能否进入
mysql -uroot -p

4. 授权其他机器登录

  • 授权主机登录
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
    
  • 刷新权限
    FLUSH PRIVILEGES;
    
  • 退出
    Exit
    
  • 更改密码
//授权
GRANT ALL ON *.* TO 'root'@'%';
//更新加密规则:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
//更新root用户密码:
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

Redis安装步骤

1. 基本运行命令

docker run -d --name redis-server -p 6379:6379 redis --requirepass “123456

注:

–name redis-server : 指定容器名称
-p 6379:6379 : 端口映射
–requitepass “redis123” : 指定redis连接密码

2. 需要挂载及持久化运行命令

docker run -d --name redis -p 6379:6379 -v /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/redis/data/:/data redis:latest /etc/redis/redis.conf --appendonly yes --requirepass "12345678"
  • 在/usr/redis新建文件夹,拷贝redis.conf配置文件,建data文件夹保存redis持久化数据
    -v 挂在目录,这里分别挂载在redis.conf文件和data文件夹
  • /etc/redis/redis.conf 关键配置,让redis以指定的配置文件启动,而不是默认无配置启动
    –appendonly yes redis启动后开启数据持久化
//进入容器内部
docker exec -it redis-6679 bash
//进入redis客户端
redis-cli
//需要密码输入
auth password

注意: 如果本地不能连接Redis

  1. 检查阿里云有没有放行该端口号
  2. 检查linux服务器防火墙状态有没有放行该端口
  3. 配置redis.conf文件

默认配置:

bind 127.0.0.1
protected-mode yes

修改为:

# bind 127.0.0.1
protected-mode no
  1. 再重启Redis,Docker命令:
docker stop +容器名/容器id
docker start +容器名/容器id

Dockerfile 定制镜像

镜像的定制实际上就是定制每一层所添加的配置和文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本 ,用这个脚本来构建、定制镜像,那么无法重复的问题,镜像构建透明性的问题,体积的问题都会得到解决。
Dokcerfile是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

构建镜像

1. 在宿主机创建一个空白目录

mkdir -p /usr/local/docker/demo1

2. 在改目录下,创建文件Dockerfile

vim Dockerfile

内容为:

FROM tomcat
RUN echo 'Hello World'>/usr/local/tomcat/webapps/ROOT/index.html
docker build -t demo1 .
-t 指定要创建的目标镜像名称 

虚悬镜像

虚悬镜像既没有仓库名,也没有标签,均为
这个镜像原本是有标签之类的,随着官方镜像维护,拉取新镜像后,旧的镜像就会被取代,就变成了虚悬镜像,可以随意删除,命令:

docker image prune

将war包部署到tomcat

1. docker文件夹下创建项目工程名称

mkdir -p /usr/local/docker/flower
cd /usr/local/docker/flower

2. 将桌面flower.zip复制到访问目录下

cp flower.zip /usr/local/docker/flower/

3. 创建镜像文件dockerfile,意思是在启动tomcat镜像的时候,会自动复制当前docker文件夹下面的war包到tomcat容器内,并解压、删除压缩包、部署

FROM tomcat #引入镜像
WORKDIR /usr/local/tomcat/webapps/ROOT
RUN rm -rf
COPY flower.zip /usr/local/tomcat/webapps/ROOT #复制到ROOT下
RUN unzip flower.zip
RUN rm -f flower.zip
WORKDIR /usr/local/tomcat 

4. dockerfile文件准备

FROM java:8
VOLUME /tmp
ADD spider.jar spider.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/exam.jar"]
  • FROM: 表示基础镜像,即运行环境
  • VOLUME/tmp: 创建/tmp目录并持久化到docker数据文件夹,因为springboot内嵌Tomcat 容器默认使用/tmp作为工作目录
  • ADD: 拷贝文件并且重命名
    EXPOSE: 并不是真正的发布端口,只是容器的端口,需要宿主机再映射
    ENTRYPOINT: 容器启动时运行的命令,相当于我们在命令行中输入java -jar xxx.jar,为了缩短Tomcat的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为ENTRYPOINT

5. 进入dockerfile文件夹中

cd /usr/local/docker

[root@iZwz91dz3gheaq5w2jih7tZ ~]# cd  /usr/local/docker/
[root@iZwz91dz3gheaq5w2jih7tZ docker]# ll
total 8
drwxr-xr-x 2 root root 4096 Apr 10 23:28 123
drwxr-xr-x 2 root root 4096 Apr 10 23:36 test

Idea集成docker实现镜像打包一键部署

1.docker开启远程访问

#修改该Dockerfile服务文件
vi /lib/systemd/system/docker.service
#修改execStart这行
ExecStart=/usr/bin/dockerd  -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
#将以前那行注释掉就行了 
#重新加载配置文件
systemctl daemon-reload
#重启服务
systemctl restart docker.service
#查看端口是否开启
netstat -nlpt
#直接curl看是否生效
curl http://127.0.0.1:2375/info

2. idea里面配置链接docker
在这里插入图片描述
3. 填入阿里云镜像加速器
在这里插入图片描述
在idea下方会有docker栏出现,在镜像中右键可以创建容器,在Run options里面可以填镜像创建的参数,-p 之类的

Dockerfile配置

1. 创建Dockerfile文件
在这里插入图片描述
Dokcerfile文本内容:

### 基础镜像,使用alpine操作系统,openjkd使用8u201
FROM java:8

#作者,可以不填
MAINTAINER Mouye <7021****@qq.com>

#系统编码
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8

#声明一个挂载点,容器内此路径会对应宿主机的某个文件夹
VOLUME /tmp

#应用构建成功后的jar文件被复制到镜像内
#名字需要改成自己当前项目的名字
ADD target/flower.jar flower.jar

#启动容器时的进程,后面的flower.jar需要改成自己的包的名字
ENTRYPOINT ["java","-jar","/flower.jar"]

#暴露8080端口,也可以暴露别的端口
EXPOSE 8080

2. 创建配置
打开如图所示位置,
在这里插入图片描述
依次选择如图所示内容添加Docker配置
3.
在这里插入图片描述
在这里插入图片描述

参考博文

注意:
当运行在容器中的项目需要读取宿主机文件的时候,比如上传的图片的宿主机中,但是docker容器中是读不到的,所以这个时候可以-v挂载对应的文件夹,那么这样就可以读取了

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值