详细安装docker

一.介绍

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

镜像(Image)、容器(Container)与仓库(Repository),这三个是Docker中最基本也是最核心的概念,对这三个概念的掌握与理解,是学习Docker的关键。

Docker镜像是一个特殊的文件系统,提供容器运行时所需的程序、库、资源、配置等文件,另外还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
在这里插入图片描述

我的Linux:CentOS-7-x86_64-DVD-1810.iso

二.安装

1.如果之前安装过旧版本的Docker,可以使用下面命令卸载:

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

2.首先需要大家虚拟机联网,安装yum工具

yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

3.设置yum源

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
#更新yum缓存
yum makecache fast

4.安装docker

yum install -y docker-ce

5.启动docker前,一定要关闭防火墙后

# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld

6.启动docker:

systemctl start docker  # 启动docker服务

systemctl stop docker  # 停止docker服务

systemctl restart docker  # 重启docker服务

7.查看docker版本

docker -v

镜像操作

命令说明
docker images列出本地images
docker images --no-trunc显示镜像完整信息
docker search mysql搜索仓库MySQL镜像
docker pull redis下载Redis官方最新镜像 ,相当于:docker pull redis:latest
docker pull bitnami/redis下载私人仓库镜像
docker rmi redis(ID)单个镜像删除,相当于:docker rmi redis:latest
docker rmi -f $(docker images -q)删除本地全部镜像

三.安装镜像

一.nginx为例

访问dockerhub官网https://hub.docker.com搜索nginx
在这里插入图片描述

1.拉取自己需要的镜像,通过命令:

docker pull nginx

2 . 查看拉取到的镜像docker images

docker images

3.导出镜像到磁盘

docker save -o nginx.tar nginx:latest

4.先删除本地的nginx镜像

docker rmi nginx:latest

5.加载本地文件:

docker load -i nginx.tar

二.安装mysql镜像

1.查找MySQL镜像:

docker search mysql

在这里插入图片描述
2.拉取MySQL5.7版本镜像

docker pull mysql:5.7

3.先查看端口

netstat  -anp  |grep  3306

如果被占用,关闭3306端口

#1.杀死进程
kill -9 PID 

#2.关闭端口
sendmail stop mysqld

#3.停止mysqld服务
service mysqld stop

4.运行mysql容器

docker run -d -p 3306:3306 --privileged=true -v /docker/mysql/conf/my.cnf:/etc/my.cnf -v /docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
命令说明
runrun 是创建并运行一个容器
-d表示后台运行
-p表示容器内部端口和服务器端口映射关联
–privileged=true设值MySQL 的root用户权限, 否则外部不能使用root用户登陆
-v /docker/mysql/conf/my.cnf:/etc/my.cnf将服务器中的my.cnf配置映射到docker中的/docker/mysql/conf/my.cnf配置
-v /docker/mysql/data:/var/lib/mysql同上,映射数据库的数据目录, 避免以后docker删除重新运行MySQL容器时数据丢失
-e MYSQL_ROOT_PASSWORD=123456设置MySQL数据库root用户的密码
–name mysql设值容器名称为mysql
mysql:5.7表示从docker镜像mysql:5.7中启动一个容器
–character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci设值数据库默认编码

4.新建MySQL用户,先进入容器

docker exec -it mysql bash

5.执行MySQL命令, 输入root密码, 连接MySQL

mysql -uroot -p

6.输入密码后, 创建新用户 (用户名: zhangsan, 密码: zs123)

GRANT ALL PRIVILEGES ON *.* TO 'zhangsan'@'%' IDENTIFIED BY 'zs123' WITH GRANT OPTION;

容器命令

命令说明
docker search mysql查询需要的容器名称
docker ps查看运行的docker容器
docker ps -a查看所有的docker容器
docker logs -f name/ID查看docker容器日志
docker start name/ID启动docker容器
docker stop name/ID停止当前运行的docker容器
docker stop $(docker ps -aq)停止所有运行的docker容器
docker restart name/ID重启docker容器
docker restart $(docker ps -a -q)重启所有容器
docker rm name/ID删除docker容器
docker rm $(docker ps -aq)删除所有docker容器
docker exec -it name/ID bash进入容器
exit退出docker容器
docker run --name containerName -p 80:80 -d nginx创建并运行nginx容器

启动所有容器

docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)

再举例创建并运行redis:

docker run 
-d \
--name=redis \
--restart=always \  
--privileged=true \
-p 6379:6379 \
-v /usr/local/docker/redis/conf:/etc/redis/redis.conf \
-v /usr/local/docker/redis/data:/data \
redis:5.0.2  --requirepass "123456" 
命令说明
runrun 是创建并运行一个容器
-d表示后台运行
–name redis设值容器名称为redis
–restart=always自动启动容器
–privileged=true使用该参数,container内的root拥有真正的root权限,外部的一个普通用户权限
-p 6379:6379将主机的6379端口映射到容器的6379端口
-v /usr/local/docker/redis/conf:/etc/redis/redis.conf配置文件映射,容器启动成功可以通过更改宿主机的配置文件来达到更改容器实际配置文件的目的
-v /usr/local/docker/redis/data:/data/usr/local/my-redis/data是宿主机中持久化文件的位置,/data是容器中持久化文件的位置

进入容器后运行客户端redis-cli

其他参数说明
-itd-i: 交互式操作,-t: 终端 ,-d:后台运行

四.数据卷

一.介绍
修改nginx的html页面时,需要进入nginx内部。并且因为没有编辑器,修改文件也很麻烦。
数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。
一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。

这样,我们操作宿主机的/var/lib/docker/volumes/html目录,就等于操作容器内的/usr/share/nginx/html目录了
在这里插入图片描述
二.创建数据卷

① 创建数据卷

docker volume create html

② 查看所有数据

docker volume ls

③ 查看数据卷详细信息卷

docker volume inspect html

三.挂载数据卷
1.创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器内目录

docker run --name containerName -v html:/usr/share/nginx/html -p 80:80 -d nginx
  1. 进入html数据卷所在位置,并修改HTML内容
# 查看html数据卷的位置
docker volume inspect html
# 进入该目录
cd /var/lib/docker/volumes/html/_data:
# 修改文件
vi index.html
命令说明
docker volume create创建数据卷
docker volume ls查看所有数据卷
docker volume inspect查看数据卷详细信息,包括关联的宿主机目录位置
docker volume rm删除指定数据卷
docker volume prune删除所有未使用的数据卷

五.自定义镜像

一.介绍
镜像就是在系统函数库、运行环境基础上,添加应用程序文件、配置文件、依赖文件等组合,然后编写好启动脚本打包在一起形成的文件。自定义镜像,其实就是实现上述打包的过程。
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。
在这里插入图片描述

指令说明实例
FROM指定基础镜像FROM
ENV设置环境变量ENV key value
COPY拷贝本地镜像到指定目录COPY ./mysql-5.7.rpm/tmp
RUN执行Linux的shell命令RUN yum install gcc
EXPOSE指定容器运行时监听的端口EXPOSE 8080
ENTRYPOINT镜像中应用的启动命令,运行是调用ENTRYPOINT java -jar xx.jar

二.实例,基于Ubuntu构建Java项目

1.在/tmp/下新建一个docker-demo目录

mkdir -p /tmp/docker-demo

2.将需要的文件拷贝到目录
在这里插入图片描述
Dockerfile内容

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar

# 安装JDK
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8

# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

3.进入docker-demo目录下创建镜像,注意最后的空格加点,代表Dockerfile所在目录。

docker build -t javaweb:1.0 .

4.最后创建并运行容器,访问192.168.***.***:8090/hello/count

docker run --name web -p 8090:8090 -d javaweb:1.0

六.安装DockerCompose

一.介绍:
Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!通过指令定义集群中的每个容器如何运行。

version: "3.8"
 services:
  mysql:
    image: mysql:5.7.25
    environment:
     MYSQL_ROOT_PASSWORD: 123 
    volumes:
     - "/tmp/mysql/data:/var/lib/mysql"
     - "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"
  web:
    build: .
    ports:
     - "8090:8090"

上面的Compose文件就描述一个项目,其中包含两个容器:

  • mysql:一个基于mysql:5.7.25镜像构建的容器,并且挂载了两个目录
  • web:一个基于docker build临时构建的镜像容器,映射端口时8090

二.安装DockerCompose
1.修改文件权限,不然无法下载

# 修改权限
chmod +x /usr/local/bin/docker-compose

2.下载

# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

3.Base自动补全命令:

# 补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

如果这里出现错误,需要修改自己的hosts文件:

echo "199.232.168.131 raw.githubusercontent.com" >> /etc/hosts

七.DockerCompose部署微服务

1.将所需微服务打成jar包
在这里插入图片描述
每个微服务pom修改,后打成app.jar

<build>
  <!-- 服务打包的最终名称 -->
  <finalName>app</finalName>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
  </plugins>
</build>

2.编辑一个cloud-demo包,放入tmp目录
在这里插入图片描述
gateway内容
在这里插入图片描述
根据Dockerfile文件可知,这是基于8-alpine自定义的镜像
其他user、order-service都是一样

mysql目录内容
在这里插入图片描述
hmy.cnf是mysql配置
在这里插入图片描述
这些是数据库

docker-compose.yml内容如下

version: "3.2"

services:
  nacos:
    image: nacos/nacos-server
    environment:
      MODE: standalone
    ports:
      - "8848:8848"
  mysql:
    image: mysql:5.7.25
    environment:
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "$PWD/mysql/data:/var/lib/mysql"
      - "$PWD/mysql/conf:/etc/mysql/conf.d/"
  userservice:
    build: ./user-service
  orderservice:
    build: ./order-service
  gateway:
    build: ./gateway
    ports:
      - "10010:10010"

3.最后在/tmp目录下运行

docker-compose up -d

注意:由于有些服务需要先运行,而docker-compose运行的项目微服务是一起运行的。所有需要重新让部分先运行。

docker-compose restart 微服务名称

4.下面是我的老师给我的某些容器开机自启脚本

version: "3.5"
services:
  redis:
    image: redis:5.0.2
    container_name: redis
    ports:
      - 6379:6379
    volumes:
      - /data/redis:/data
    restart: always
    networks:
      itcast:
        aliases:
          - redis
  mongo:
    image: mongo:4.4
    container_name: mongo
    ports:
      - 27017:27017
    volumes:
      - /data/mongodb/db:/data/db
      - /data/mongodb/tanhua:/data/tanhua
    environment:
      - MONGODB_USER=root
      - MONGODB_PASS=root
      - MONGODB_DATABASE=testdb
    restart: always
    networks:
      itcast:
        aliases:
          - mongo
  nacos:
    image: nacos/nacos-server
    container_name: nacos
    volumes:
      - /data/nacos/logs:/home/nacos/logs
    ports:
      - 8848:8848
    environment:
      - MODE=standalone    
    restart: always
    networks:
      itcast:
        aliases:
          - nacos
  yapi:
    image: mrjin/yapi:latest
    container_name: yapi
    environment:
      - VERSION=1.5.6
      - LOG_PATH=/tmp/yapi.log
      - HOME=/home
      - PORT=3000
      - ADMIN_EMAIL=tanhua@itcast.cn
      - DB_SERVER=mongo
      - DB_NAME=yapi
      - DB_PORT=27017
    restart: always
    ports:
      - 3000:3000
    volumes:
      - /data/yapi/log/:/home/vendors/log
    depends_on:
      - mongo
    entrypoint: "bash /wait-for-it.sh mongo:27017 -- entrypoint.sh"
    networks:
      itcast:
        aliases:
          - yapi
networks:
  itcast:
    name: itcast
    driver: bridge

compose命令

命令说明
docker-compose up -d在后台所有启动服务
docker-compose stop停止正在运行的容器
docker-compose logs打印日志
docker-compose pull拉取服务依赖的镜像
docker-compose rm -f强制直接删除,包括非停止状态的容器
docker-compose restart重启项目中的服务

八.搭建镜像仓库

一.私服采用的是http协议,默认不被Docker信任,所以需要做一个配置:

# 打开要修改的文件
vi /etc/docker/daemon.json
# 添加内容:
"insecure-registries":["192.168.本机ip.32:8080"]

#最终
vi /etc/docker/daemon.json

{
  "registry-mirrors": [
    "https://tnxkcso1.mirror.aliyuncs.com"
  ],
 "insecure-registries":["192.168.本机ip.32:8080"]
}



# 重加载
systemctl daemon-reload
# 重启docker
systemctl restart docker

二.使用DockerCompose部署带有图象界面的DockerRegistry,命令如下:

1.创建一个目录

mkdir -p /tmp/register-ui

2.创建一个docker-compose.yml文件

#进入/tmp/register-ui目录
cd /tmp/register-ui

#创建docker-compose.yml文件
touch docker-compose.yml

2.打开touch docker-compose.yml文件加入下面配置

version: '3.0'
services:
  registry:
    image: registry
    volumes:
      - ./registry-data:/var/lib/registry
  ui:
    image: joxit/docker-registry-ui:static
    ports:
      - 8080:80
    environment:
      - REGISTRY_TITLE=Mine仓库
      - REGISTRY_URL=http://registry:5000
    depends_on:
      - registry

3.进入docker-compose.yml目录,启动仓库

docker-compose up -d

4.查看日志

docker-compose logs -f

三.推送、拉取镜像
① 重新tag本地镜像,名称前缀为私有仓库的地址:192.168.150.101:8080/

docker tag nginx:latest 192.168.150.101:8080/nginx:1.0 

② 推送镜像

docker push 192.168.150.101:8080/nginx:1.0 

③ 拉取镜像

docker pull 192.168.150.101:8080/nginx:1.0 

访问仓库:192.168.本机ip.32:8080/
在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愛沢かりん

感谢您对我的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值