第一章-Docker概述

学习视频-前锋:https://www.bilibili.com/video/BV1sK4y1s7Cj?from=search&seid=8313785717449262117

学习-狂神:https://www.bilibili.com/video/BV1og4y1q7M4?from=search&seid=6062267095260519281

解决的问题:

1本地运行没问题。(环境不一致的问题)

2多用户的操作系统,会相互影响。(比如linux)

3运维成本过高。(每次新服务器都要进行部署)

4学习一门技术,学习安装成本高

1Docker介绍

Docker是一个开源的应用容器引擎;是一个轻量级容器技术;

Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;

运行中的这个镜像称为容器,容器启动是非常快速的。

  1. 官网安装参考手册:https://docs.docker.com/install/linux/docker-ce/centos/

  2. 确定你是CentOS7及以上版本

    1
    2
    
    [root@192 Desktop]# cat /etc/redhat-release
    CentOS Linux release 7.2.1511 (Core)
    

docker三个重要概念

  • 仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

Docker架构

2linux安装docker

yum(安装docker)

若有之前版本需要卸载,sudo yum remove docker \ …省略,copy官网就好。

1下载yum install -y yum-utils 安装yum工具包

2设置国内安装地址(官网是国外地址)yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3更新yum软件包索引yum makecache fast 4安装Docker CE: yum -y install docker-ce docker-ce-cli containerd.io

5启动docker: systemctl start docker 开启开机自动启动:systemctl enable docker 6测试docker version: docker run hello-world或 docker images

3命令大全

-1常用命令

全部命令:https://www.runoob.com/docker/docker-command-manual.html

命令 功能
docker search xxx[比如nginx] 搜索
docker pull xxx[比如nginx] 下载
docker images 显示本地镜像
docker ps [-a] 参数-a表示显示所有容器 显示运行的容器
docker stop 容器前几位id/name 关闭docker容器
docker restart xxx[比如nginx] 重新启动x容器
docker rm $(docker ps -a -q) 删除所有已经停止的容器
systemctl status docker 查看docker进程状态
systemctl stop docker 停止docker进程
systemctl start/restart docker 启动/重启docker进程
systemctl enable docker 开机启动docker

-2镜像相关命令

指定版本号时候,需要正确的版本号,搜索网址:https://hub.docker.com/

命令 功能
docker images [-q只显示所有id] 显示所有本地镜像
docker search xxx[比如nginx] 搜索镜像
docker pull xxx[比如nginx]
可以指定版本号nginx:13.3
下载
docker rmi IMAGEID[需镜像ID]
docker rmi `sdocker images -q` | 卸载本地镜像
卸载本地所有镜像 |

docker可以对镜像进行导入导出

-3容器相关命令

镜像相当于java中的class,容器相当于java中的object。

创建容器:docker run 参数 [/bin/bash] 其中的/bin/bash的作用是因为docker后台必须运行一个进程,否则容器就会退出,在这里表示启动容器后启动bash。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#docker run 参数详解  -it一般称为交互式 -id一般称为守护式
-i, --interactive=false, 打开STDIN,用于控制台交互

-t, --tty=false, 分配tty设备,该可以支持终端登录,默认为false,常和-i一起用 -it
	#-it创建的容器,会跳转到容器内部进行交互,然后exit退出后就关闭了

-d, --detach=false, 指定容器运行于前台还是后台,默认为false
	#-id创建的容器,可交互(交互命令为docker exec -it 容器名 /bin/bash),exit退出还会运行

--name=docker1 为容器起名称 --name空格name也可以

前面一个是宿主机的端口号

1
2
3
4
# docker运行tomcat,无法直接访问宿主机上的文件,可以放到 下面的/usr/local/tomcat/webapps中
docker run -d -p 8111:8080 --name=tomcat_8111  \
-v /home/lsl/docker_tomcat7:/usr/local/tomcat/webapps  \
tomcat:7.0.57-jre8
命令 功能
docker run tomcat:7.0.57-jre8 创建并启动容器
docker ps [-a所有,包含关闭的 -q只显示id] 查看运行的容器
docker stop 容器name/容器id 停止容器
docker start 容器name/id 启动已创建容器
docker rm 容器name/id
docker rm $(docker ps -aq)
删除容器
删除所有容器
==删除前要stop==
docker inspect 容器名称 查看容器详细信息

把宿主文件转到容器内部(不推荐)

docker cp 文件名称 容器id:容器内部路径 比如:docker cp t1.txt fe:/usr/local/tomcat/webapps/

4Docker容器数据卷

-数据卷介绍

Docker容器删除后,在容器中产生的数据也会随之销毁 Docker容器和外部机器可以直接交换文件吗? 容器之间想要进行数据交互?

什么是数据卷

数据卷是宿主机中的一个目录或文件 当容器目录和数据卷目录绑定后,对方的修改会立即同步 一个数据卷可以被多个容器同时挂载 一个容器也可以被挂载多个数据卷

image-20200426104506749

-数据卷配置

创建启动容器时,可以用-v参数设置数据卷

1
2
3
4
5
6
docker run … -v 宿主机目录:容器内目录 …

docker run -id –name=c_nginx \
-p 访问端口8080:主机端口80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx

注意: 1目录必须是绝对路径。 2若目录不存在,会自动创建。 3可以挂载多个数据卷。

$PWD可以表示当前宿主机目录

1
2
3
4
5
6
7
8
9
#1创建数据卷,
docker volume create 数据卷名称

#创建数据卷后 默认会存放在某目录下,
/var/lib/docker/volumes/数据卷名称/_data

#查看数据卷名称
docker volume inspect 数据卷名称

-v /volume没有设置宿主机挂载目录时,宿主机会自动分配一个。 具体可以 docker inspect 容器名称 ,查看mounts中的,source查看目录

1
2
3
4
5
#1查看全部数据卷
docker volume ls

#2删除数据卷
docker volume rm 数据卷名称

-数据卷容器

多容器进行数据交换 1.多个容器挂载同一个数据卷,上文的-v参数。 2.数据卷容器,(c1,c2挂载c3,c3挂载宿主机的数据卷。相当于c1,c2挂载的数据卷)

image-20200426110358854

1
2
3
4
5
#1.创建启动c3数据卷容器,使用-v参数设置数据卷
docker run -it --name=c3 -v /volume centos:7 /bin/bash
#2.创建启动c1 c2容器,使用--volumes-from参数设置数据卷
docker run -it --name=cl --volumes-from c3 centos: 7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos: 7 /bin/bash

使用docker安装软件

安装nginx

搜索:docker search nginx

下载:docker pull nginx

启动

-d: 后台运行 -p: 端口映射 冒号前是本机端口,冒号后是容器端口

==docker run -d -p 8787:80 –name nginx-8787 nginx== 启动容器 -name可选 nginx-8787是名称

若出现IPv4 forwarding is disabled. Networking will not work_ 按照以下步骤解决: 1、编辑 vi /etc/sysctl.conf 2、添加 net.ipv4.ip_forward=1 3、重启network服务 systemctl restart network

然后访问ip+8787出现Wecome to nginx就说明安装成功

** 部署nginx**

$PWD表示当前目录,也可以手动 -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf表示把当前主机的conf/nginx.conf挂载到容器的/etc/nginx/nginx.conf配置目录 -v $PWD/logs:/var/log/nginx把主机当前目录下的logs目录挂摘到容器的/var/log/nginx

1
2
3
4
docker run -id –name=c_nginx \
-p 访问端口8080:主机端口80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx

安装mysql

https://hub.docker.com搜索mysql

找到对应版本下载docker pull mysql:5.7.30

然后启动:docker run -itd –name mysql -p 3336:3306 -e MYSQL_ROOT_PASSWORD=密码123456 mysql:版本号

这样就可以直接通过ip+3336进行访问

第二章-CICD