Docker应用操作

目录

一、Docker安装

1 卸载版本

2 在线安装

3 离线安装

4 Docker镜像加速

二、常用操作指令

1、Docker 基本操作实践

2、Docker 镜像操作实践

3、Docker 容器操作实践

4、Docker数据管理实践

5、Dockerfile及镜像制作实践

  1).制作JDK镜像

  2).基于JDK镜像启动sentinel

  3).制作Sentinel镜像(镜像启动更便利)

三、Docker 镜像安装实践

1、启动运行mysql

2、安装运行Redis

3、安装运行nginx

4、安装运行Nocas(注意运行参数IP和用户修改成自己的)

四、Docker 容器互联实践


一、Docker安装

Docker是一个虚拟化平台( 官网https://www.docker.com/),诞生于 2013 年初,基于 Google 公司的 Go 语言进行实现。可以通过虚拟化方式,为应用提供可运行的容器。基于这种方式,可更快地打包、测试以及部署应用程序。

1 卸载版本

yum list installed | grep docker 列出当前所有docker的包

yum -y remove docker的包名称 卸载docker包

rm -rf /var/lib/docker 删除docker的所有镜像和容器

2 在线安装

1:安装一组工具:    
      sudo yum install -y yum-utils 
2:设置 yum 仓库地址:    

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
sudo yum-config-manager \
     --add-repo \
     http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


3:更新 yum 缓存:    
      sudo yum makecache fast #yum 是包管理器

4:列出需要安装的版本列表

yum list docker-ce --showduplicates | sort -r


5:安装 docker:

最新版安装:   

sudo yum install -y docker-ce docker-ce-cli containerd.io

  指定版安装:

sudo yum install docker-ce-18.06.1.ce

 查看版本:docker -v

3 离线安装

1.下载离线安装包
    https://download.docker.com/linux/static/stable/网址下载指定版本
2.下载离线安装工具
   https://github.com/Jrohy/docker-install/
3.将下载好的资源放在一个目录(离线安装包+离线安装工具)
   在linux环境下,创建/root/setup/docker目录,然后拷贝下载好的资源到此目录(可通过MobaXterm工具直接上传到linux目录)

  4.执行安装操作

# 进入文件夹
cd /root/setup/docker

# 为 install.sh添加执行权限
chmod +x install.sh

# 安装
./install.sh -f docker-20.10.6.tgz

5.安装成功后,检查状态
   docker info

4 Docker镜像加速

163加速:

cat <<EOF > /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com"
  ],
  "max-concurrent-downloads": 10,
  "log-driver": "json-file",
  "log-level": "warn",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
    },
  "data-root": "/var/lib/docker"
}
EOF

阿里云加速: 

添加阿里云镜像下载地址: vim /etc/docker/daemon.json
{"registry-mirrors": ["https://zydiol88.mirror.aliyuncs.com"] }

二、常用操作指令

1、Docker 基本操作实践

为 install.sh添加执行权限:           chmod +x install.sh
安装:                                            ./install.sh -f docker-20.10.6.tgz
查看Docker信息:                         docker info
启动docker服务:                          systemctl start docker
停止docker服务 :                         systemctl stop docker
查看Docker状态:                         systemctl status docker
设置Docker开机自启:                  systemctl enable docker
禁用Docker开机自启:                  systemctl disable docker
重新启动Docker服务:                  systemctl restart docker

查看docker info中具体key的信息: docker info | grep 'Docker Root Dir:'

2、Docker 镜像操作实践

搜索镜像文件 :       docker search 镜像名称 

下载镜像文件:           docker pull 镜像名  (例:docker pull hello-world)
浏览镜像文件:        docker images
运行镜像文件:        docker run hello-world
导入镜像操作:        docker load < hello-world.tar.gz  
导出镜像文件:        docker save  hello-world | gzip > hello-world.tar.gz  
查看镜像历史:        docker history hello-world  #查看镜像构建历史(**可以查看镜像启动命令)
查看镜像详情:        docker inspect 镜像名或镜像id(例:docker inspect hello-world)
删除镜像文件:        docker image rm 镜像名或镜像id (例:docker image rm hello-world)或 docker rmi 镜像名(rmi = remove image) 

添加镜像名称:        docker tag redis:5.0.12    redis:v5012 (将第一个名称镜像复制一份,重命名为第二个)    #tag 一般用来表示版本,默认的 tag 是 latest,表示最近的版本。

 查看相同镜像:       docker images | grep redis  # 可以看到同一个镜像(ID相同)可以有多个名称

3、Docker 容器操作实践

创建并启动容器:                    docker run -it xxxx bash(例:docker run -it centos:7 bash)
                                                 # xxxx - 镜像名, 或 image id 的前几位,
                                                 #-it 这是两个参数(-i表示交互式操作, -t 表示终端)
                                                 # bash 表示进入操作终端,基于交互式进行相关操作(例如执行linux相关指令)                                                                                         #-d 参数表示后台运行 (例:docker run -d xxxxx)                        
查看docker运行中的容器:     docker ps
查看docker运行所有容器:     docker ps -a              #-a表示全部(all)

查看容器日志:         docker container logs 802       #重要 ,802为容器id ,container可省略不写
查看容器内容:         docker inspect 容器id
启动容器:                docker container start 容器id
停止容器:                docker container stop 容器id
重启容器:                docker container restart 容器id
进入容器:                docker exec -it 802 bash         #802为容器id
退出容器:                exit
删除容器:                docker container rm 802         #802为容器id
清理所有终止状态容器:       docker container prune

删除多有容器(包括运行中的): docker rm -f $(docker ps -aq)   # -f表示强制删除,-q表示只列出容器id,-aq表示列出所有容器id,$(docker ps -aq) 表示引用了所有容器的id,进行批量删除。

4、Docker数据管理实践

#容器中管理数据主要有两种方式:
1.挂载主机目录 (Bind mounts
2.数据卷(Volumes)

创建数据卷:               docker volume create container-vol    # container-vol为数据卷名
删除数据卷:               docker volume rm container-vol          # 如果数据卷被容器使用则无法删除
查看所有数据卷:        docker volume ls
查看指定数据卷:        docker volume inspect container-vol
清理无主数据卷:        docker volume prune

启动挂载数据卷的容器:    1):docker run -it -v container-vol:/root centos:7 bash                  #-v container-vol:/root 把数据卷 container-vol 挂载到容器的 /root 目录
                                           2):docker run -it --mount source=container-vol,target=/root centos:7 bash      
挂载主机目录:        docker run -it -v /usr/app:/opt/app centos:7 bash            
                                 #  /usr/app:为宿主机目录
                                 #  /opt/app: 为启动容器的一个目录
                                 #  -v 用于指定挂载目录,如果本地目录(宿主机目录)不存在, Docker 会自动为你按照挂载目录进行目录的创建。
查看挂载目录信息:     docker inspect 91a #91a 为容器id

5、Dockerfile及镜像制作实践

  1).制作JDK镜像

构建镜像(需要Dockerfile文件和资源):    docker build -t jdk:8 .  #不要丢掉这里的点,-t表示镜像标识(镜像名),是tag单词的缩写.
运行镜像:                                                  docker run -it jdk:8 bash
----------------------
Dockerfile文件(可通过:touch Dockerfile 创建此文件):

FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz /usr/local/docker
ENV JAVA_HOME=/usr/local/docker/jdk1.8.0_51 \
    PATH=/usr/local/docker/jdk1.8.0_51/bin:$PATH
CMD ['bash']

参数说明: 

FROM                 #编写FROM语句(关键字一定要大写,例如FROM不能写小写)
ADD                    #通过ADD命令将宿主机中的压缩包传入镜像容器中的指定目录,并同时解压缩
ENV                    #设置环境变量(通过ENV关键字实现,目录启动容器中的目录)        
CMD ['bash']       #指定命令行操作(所有指令与后面内容要有空格)
----------------------

  2).基于JDK镜像启动sentinel

  第一步:将 sentinel-dashboard-1.8.0.jar 文件拷贝宿主机指定目录,例如/root/servers目录(servers目录不存在可以自己创建)。
  第二步:启动镜像容器,通过java执行运行web服务。
        基于jdk:8镜像启动运行sentinel服务(服务启动后可在宿主机通过localhost:8180进行访问) 

docker run -d  -p 8180:8080 --name sentinel  \
-v /root/servers:/usr/sca  \
jdk:8 java -jar /usr/sca/sentinel-dashboard-1.8.0.jar

  第三步:打开浏览器,访问sentinel服务。
        访问时你的ip地址应该为宿主机的ip地址,端口号为宿主机的端口号。

---------------------- 

  3).制作Sentinel镜像(镜像启动更便利)

准备资源:

1、centos:7镜像

2、jdk-8u51-linux-x64.tar.gz

3、sentinel-dashboard-1.8.0.jar

通过docker images指令查看centos:7是否存在,然后将 jdk-8u51-linux-x64.tar.gz,sentinel-dashboard-1.8.0.jar放在/root/setup/sentinel目录(目录不存在的话自己创建)。

构建镜像:

1、创建Dockerfile文件,并添加如下内容:

FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz  /usr/local/
ADD sentinel-dashboard-1.8.0.jar  /usr/local/
ENV JAVA_HOME=/usr/local/jdk1.8.0_51 \
    PATH=/usr/local/jdk1.8.0_51/bin:$PATH
EXPOSE 8080
ENTRYPOINT ["java","-jar","/usr/local/sentinel-dashboard-1.8.0.jar"]

 2、构建镜像,在Dockerfile所在目录执行docker指令。

docker build -t  sentinel:8 .  #不要丢掉这里的点

3、运行sentinel容器

docker run -d -p 8180:8080 sentinel:8  
#-d 表示后台运行,-p用于指定端口映射,sentinel:8为镜像文件名

4、使用 docker ps 指令查看sentinel容器,假如看不到容器,可通过"docker container logs 容器id"方式查看容器状态。

5、登录浏览器访问sentinel(ip地址应该为宿主机的ip地址,端口号为宿主机的端口号)。

三、Docker 镜像安装实践

1、启动运行mysql

如果安装过程中失败了,则可通过docker ps -a 查看以前的容器,假如已存在,则通过docker rm 镜像id 指令删除再重新安装即可。(sudo表示以管理员的身份运行,如果是管理员可以省略不写)。

sudo docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.0.23

 设置mysql开机自启动: docker update mysql --restart=always

2、安装运行Redis

1、准备配置文件
      创建redis配置文件目录
      mkdir -p /usr/local/docker/redis01/conf
      在配置文件录下创建redis.conf配置文件(这个文件一定要创建,否在我们进行目录挂载时默认生成的是一个目录)
      touch /usr/local/docker/redis01/conf/redis.conf

2、创建redis实例并启动: 

sudo docker run -p 6379:6379 --name redis01 \
-v /usr/local/docker/redis01/data:/data \
-v /usr/local/docker/redis01/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf 

3、检查redis版本: redis-cli -v 或者 redis-server -v 

4、登录redis(默认不要密码):redis-cli 

3、安装运行nginx

1):创建数据卷:     docker volume create nginx-vol     #这个对象会在宿主机直接创建一个目录
2):启动nginx服务: 

docker run --name nginx  -p 80:80 -v nginx-vol:/etc/nginx -d nginx

#其中   :/etc/nginx  为nginx容器启动时,nginx镜像文件默认的解压目录
#说明:  假如以后想修改nginx配置,可以直接去nginx-vol数据卷对应的目录去修改.

4、安装运行Nocas(注意运行参数IP和用户修改成自己的)

      通过source指令运行容器目录下的sql文件

source  /容器目录/nacos-mysql.sql

     创建并启动nacos容器(HOST/USER/PASSWORD/修改成自己的参数)

docker run  \
-e TZ="Asia/Shanghai" \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_DATABASE_NUM=1 \
-e MYSQL_SERVICE_HOST=192.168.126.128 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=jason \
-e MYSQL_SERVICE_PASSWORD=jason \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-p 8848:8848 \
--name nacos \
--restart=always \
-d nacos/nacos-server:1.4.1

#参数说明
#单节点模式                  MODE=standalone
#数据库地址                  MYSQL_SERVICE_HOST
#数据库用户名              MYSQL_SERVICE_USER
#数据库密码                  MYSQL_SERVICE_PASSWORD
#需连接的数据库名称    MYSQL_SERVICE_DB_NAME
#端口映射                      -p 8848:8848
#任意时候重启容器,开机就能自动启动容器(需设置docker为开机自启)  --restart=always

四、Docker 容器互联实践

Docker 中容器与容器之间进行通讯的解决方案一般有两种:
第一种:两个容器通过宿主机进行通讯(容器中的端口会映射到宿主机上)
第二种:两个容器之间直接通过虚拟网络进行连接,但是需要我们在docker中创建网络。

1、新建网络

docker network create -d bridge t-net  #t-net为自己起的网络名称

      其中,-d driver,网络类型,默认 bridge。
      说明,创建好这个网络以后,在网落上添加容器,容器就可以通讯了 

2、列出所属有网络:     

docker network ls

3、查看网络信息:   

docker inspect 67d #67d 为创建的网络id

4、创建容器:        

1):  docker run -it --name app1 --network t-net centos:7

2):  docker run -it --name app2 --network t-net centos:7

5、测试网络互通:    在两个终端中分别执行:

ping app1    

ping app2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值