docker是一种容器技术
容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。
开发在自己机器上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或者公有云主机上运行。
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。
Docker 和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
容器不需要虚拟硬件,也不需要完整操作系统。多个容器共享宿主机的内核。
docker的特点:轻量级、可移植、资源占用少
对于开发人员:Build Once, Run Anywhere
对于运维人员:Configure Once,Run Anything

一、更新yum源
1、首先备份系统自带yum源配置文件/etc/yum.repos.d/CentOS-Base.repo
[root@localhost ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2、进入yum源配置文件所在的文件夹
[root@localhost ~]# cd /etc/yum.repos.d/
3、下载163的yum源配置文件到上面那个文件夹内
[root@localhost yum.repos.d]# wget http://mirrors.163.com/.help/...
4、运行yum makecache生成缓存
[root@localhost yum.repos.d]# yum makecache
5、这时候再更新系统就会看到以下mirrors.163.com信息
[root@localhost yum.repos.d]# yum -y update

二、安装docker
1、yum源更新
yum update
2、卸载旧版本(如果安装过旧版本的话)
yum remove docker docker-common docker-selinux docker-engine
3、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
4、设置yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/doc...
5、可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
6、安装docker
yum install docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
yum install <FQPN> # 例如:sudo yum install docker-ce-17.12.0.ce
7、启动并加入开机启动
systemctl start docker
systemctl enable docker
8、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
docker version
9、取消sudo
创建名为docker的组:
sudo groupadd docker
将当前用户加入组docker:
sudo gpasswd -a ${USER} docker
重启docker服务:
sudo systemctl restart docker
添加访问和执行权限:
sudo chmod a+rw /var/run/docker.sock

三、设置阿里云源
登录阿里云,选择镜像加速器,按照不同的操作系统来进行配置

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://*****.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

对于centos8安装报错,需要执行如下操作

yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce 
systemctl start docker

四、docker使用
1、拉取镜像
docker pull mysql:5.6
可以在docker服务启动配置中增加--registry-mirror=proxy_URL来指定镜像代理服务地址。
一些镜像命令:
(1)使用images命令列出镜像:使用docker images或docker image ls命令可以列出本地主机上已有镜像的基本信息;
(2)使用tag命令添加镜像标签:使用docker tag命令来为本地镜像任意添加新的标签。例如,添加一个新的myubuntu:latest镜像标签:docker tag ubuntu:latest myubuntu:lastest
(3)使用inspect命令查看详细信息
(4)使用history命令查看镜像历史
(5)搜寻镜像:使用docker search命令可以搜索Docker Hub官方仓库中的镜像。语法为docker search [option] keyword。支持的命令选项主要包括:
❑ -f, --filter filter:过滤输出内容;
❑ --format string:格式化输出内容;
❑ --limit int:限制输出结果个数,默认为25个;
❑ --no-trunc:不截断输出结果。
搜索官方提供的带nginx关键字的镜像:docker search --filter=is-official=true nginx
(6)使用标签删除镜像:使用docker rmi或docker image rm命令可以删除镜像,命令格式为docker rmi IMAGE [IMAGE...],其中IMAGE可以为标签或ID。支持选项包括:
❑ -f, -force:强制删除镜像,即使有容器依赖它;
❑ -no-prune:不要清理未带标签的父镜像。
(7)清理镜像:使用Docker一段时间后,系统中可能会遗留一些临时的镜像文件,以及一些没有被使用的镜像,可以通过docker image prune命令来进行清理。支持选项包括:
❑ -a, -all:删除所有无用镜像,不光是临时镜像;
❑ -filter filter:只清理符合给定过滤器的镜像;
❑ -f, -force:强制删除镜像,而不进行提示确认。
docker image prune -f
(8)创建镜像:创建镜像的方法主要有三种:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建
使用docker [container] commit,实现基于已有容器创建。命令格式为docker [container] commit [OPTIONS]CONTAINER [REPOSITORY [:TAG]],主要选项包括:
❑ -a, --author="":作者信息;
❑ -c, --change=[]:提交的时候执行Dockerfile指令,包括CMD|ENTRYPOINT|E NV|EXPOSE|LABEL|ONBUILD|USER|VOLUME|WORKDIR等;
❑ -m, --message="":提交消息;
❑ -p, --pause=true:提交时暂停容器运行。
docker [container] commit -m "add a new file" -a "Docker New" imageID
使用docker [container] import命令,实现基于本地模板导入,命令格式为docker [image] import [OPTIONS] file|URL|-[REPOSITORY [:TAG]]
使用docker [image] build命令,实现基于dockerfile创建,
docker [image] build -t python:3
(9)导出镜像:使用docker [image] save命令。该命令支持-o、-output string参数,导出镜像到指定的文件中。
docker save -0 ubuntu_18.tar unbuntu:18
(10)载入镜像:使用docker [image] load将导出的tar文件再导入到本地镜像库。支持-i、-input string选项,从指定文件中读入镜像内容。
docker load -i unbuntu_18.tar
(11)上传镜像:使用docker [image] push命令上传镜像到仓库
。命令格式为docker [image] push NAME[:TAG] |[REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG]

2、运行mysql

docker run -p 3306:3306 --name mymysql -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

容器是镜像的一个运行实例。
(1)新建容器:可以使用docker [container] create命令新建一个容器:docker create -it mysql:5.6
(2)启动容器:使用docker [container] start命令来启动一个已经创建的容器:
(3)查看正在运行的容器:docker ps
查看所有容器的ID:docker ps -qa
(4)新建并启动容器:docker run
(5)查看容器输出:通过docker [container] logs命令。该命令支持的选项包括:
❑ -details:打印详细信息;
❑ -f, -follow:持续保持输出;
❑ -since string:输出从某个时间开始的日志;
❑ -tail string:输出最近的若干日志;
❑ -t, -timestamps:显示时间戳信息;
❑ -until string:输出某个时间之前的日志。
(6)暂停容器:使用docker [container] pause CONTAINER [CONTAINER...]命令来暂停一个运行中的容器
docker run --name test --rm -it ubuntu bash
docker pause test
(7)中止容器:使用docker [container] stop来终止一个运行中的容器。该命令的格式为docker [container] stop [-t|--time[=10]][CONTAINER...]。该命令会首先向容器发送SIGTERM信号,等待一段超时时间后(默认为10秒),再发送SIGKILL信号来终止容器。
docker stop test
(8)重启容器:docker restart ID
(9)进入容器:使用-d参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行操作。这个时候如果需要进入容器进行操作,推荐使用官方的attach或exec命令。exec命令更方便。该命令的基本格式为:[插图]比较重要的参数有:
❑ -d, --detach:在容器中后台执行命令;
❑ --detach-keys="":指定将容器切回后台的按键;
❑ -e, --env=[]:指定环境变量列表;
❑ -i, --interactive=true|false:打开标准输入接受用户输入命令,默认值为false;
❑ --privileged=true|false:是否给执行命令以高权限,默认值为false;
❑ -t, --tty=true|false:分配伪终端,默认值为false;
❑ -u, --user="":执行命令的用户名或ID。
进入到刚创建的容器中,并启动一个bash
docker exec -it ID /bin/bash root@....
(10)删除容器:使用docker [container] rm命令来删除处于终止或退出状态的容器,命令格式为docker [container] rm [-f|--force] [-l|--link] [-v|--volumes] CONTAINER [CONTAINER...]。主要支持的选项包括:
❑ -f, --force=false:是否强行终止并删除一个运行中的容器;
❑ -l, --link=false:删除容器的连接,但保留容器;
❑ -v, --volumes=false:删除容器挂载的数据卷。
docker rm ID
(11)导出容器:导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态。可以使用docker [container]export命令,该命令格式为:[插图]其中,可以通过-o选项来指定导出的tar文件名,也可以直接通过重定向来实现。 docker export -o test.tar test
(12)导入容器:使用docker [container] import命令导入变成镜像,该命令格式为:[插图]用户可以通过-c, --change=[]选项在导入的同时执行对容器进行修改的Dockerfile指令
(13)查看容器详情:查看容器详情可以使用docker container inspect [OPTIONS]CONTAINER [CONTAINER...]子命令。
docker container inspect test
(14)查看容器内进程:查看容器内进程可以使用docker [container] top [OPTIONS]CONTAINER [CONTAINER...]子命令:docker top test
(15)查看统计信息:查看统计信息可以使用docker [container] stats OPTIONS子命令,会显示CPU、内存、存储、网络等使用情况的统计信息。支持选项包括:
❑ -a, -all:输出所有容器统计信息,默认仅在运行中;
❑ -format string:格式化输出信息;
❑ -no-stream:不持续输出,默认会自动更新持续实时结果;
❑ -no-trunc:不截断输出信息。
(16)复制文件:container cp命令支持在容器和主机之间复制文件。命令格式为docker [container] cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-。支持的选项包括:
❑ -a, -archive:打包模式,复制文件会带有原始的uid/gid信息;
❑ -L, -follow-link:跟随软连接。当原路径为软连接时,默认只复制链接信息,使用该选项会复制链接的目标内容。
docker [container] cp data test:/tmp/
(17)查看变更:container diff查看容器内文件系统的变更。命令格式为docker [container] diff CONTAINER。
diff container diff test
(18)查看端口映射:container port命令可以查看容器的端口映射情况。命令格式为docker container port CONTAINER [PRIVATE_PORT[/PROTO]]
docker container port test
(19)更新配置:container update命令可以更新容器的一些运行时配置,主要是一些资源限制份额。命令格式为docker [container] update [OPTIONS] CONTAINER [CONTAINER...]。
支持的选项包括:
❑ -blkio-weight uint16:更新块IO限制,10~1000,默认值为0,代表着无限制;
❑ -cpu-period int:限制CPU调度器CFS(Completely Fair Scheduler)使用时间,单位为微秒,最小1000;
❑ -cpu-quota int:限制CPU调度器CFS配额,单位为微秒,最小1000;
❑ -cpu-rt-period int:限制CPU调度器的实时周期,单位为微秒;
❑ -cpu-rt-runtime int:限制CPU调度器的实时运行时,单位为微秒;
❑ -c, -cpu-shares int:限制CPU使用份额;
❑ -cpus decimal:限制CPU个数;
❑ -cpuset-cpus string:允许使用的CPU核,如0-3,0,1;
❑ -cpuset-mems string:允许使用的内存块,如0-3,0,1;
❑ -kernel-memory bytes:限制使用的内核内存;
❑ -m, -memory bytes:限制使用的内存;
❑ -memory-reservation bytes:内存软限制;
❑ -memory-swap bytes:内存加上缓存区的限制,-1表示为对缓冲区无限制;❑ -restart string:容器退出后的重启策略。例如,限制总配额为1秒,容器test所占用时间为10%,代码为:
docker update --cpu-quota 1000000 test

3、通过 docker ps 命令查看是否安装成功
4、启动容器:docker start 容器ID
5、进入mysql容器:docker exec -it 064c6bea326d /bin/bash
6、执行命令mysql -h localhost -u root -p,提示输入密码,输入123456,就可以进行相关数据库操作

安装nginx

docker pull nginx

docker run --name nginx-test -p 80:80 -d nginx
run 创建容器实例

-- name 容器命名

-v 映射目录

-d 设置容器后台运行

-p 本机端口映射 将容器的80端口映射到本机的80端口
语句最后一个nginx是使用镜像的名称

创建一些关键目录:
mkdir -p /root/nginx/www /root/nginx/logs /root/nginx/conf

将nginx-test容器配置文件copy到本地
docker cp 481e121fb29f:/etc/nginx/nginx.conf /root/nginx/conf

创建新nginx容器nginx-web,并将**www,logs,conf**目录映射到本地
docker run -d -p 80:80 --name nginx-web -v /root/nginx/www:/usr/share/nginx/html -v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/logs:/var/log/nginx nginx

启动nginx-web
docker start nginx-web

4、搭建本地仓库和数据存储
(1)使用registry镜像创建私有仓库
docker run -d -p 5000:5000 registry:2
将自动下载并启动一个registry容器,创建本地的私有仓库服务。
(2)数据卷(Data Volumes)是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于Linux中的mount行为。数据卷可以提供很多有用的特性:
❑ 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效与方便;
❑ 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作;
❑ 对数据卷的更新不会影响镜像,解耦开应用和数据;
❑ 卷会一直存在,直到没有容器使用,可以安全地卸载它。
(1)创建数据卷:volume。docker volume create -d local test
除了create子命令外,docker volume还支持inspect(查看详细信息)、ls(列出已有数据卷)、prune(清理无用数据卷)、rm(删除数据卷)等。
(2)绑定数据卷:除了使用volume子命令来管理数据卷外,还可以在创建容器时将主机本地的任意路径挂载到容器内作为数据卷,这种形式创建的数据卷称为绑定数据卷。在用docker [container] run命令的时候,可以使用-mount选项来使用数据卷。-mount选项支持三种类型的数据卷,包括:
❑ volume:普通数据卷,映射到主机/var/lib/docker/volumes路径下;
❑ bind:绑定数据卷,映射到主机指定路径下;
❑ tmpfs:临时数据卷,只存在于内存中。
下面使用training/webapp镜像创建一个Web容器,并创建一个数据卷挂载到容器的/opt/webapp目录:
docker run -d -P --name web --mount type=bind, source=/webapp, destination=/opt/webapp training/webapp python app.py
上述命令等同于使用旧的-v标记可以在容器内创建一个数据卷:
docker run -d -P --name web -v /webapp:/opt/webapp training/webapp python app.py
(3)数据卷容器:如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载。
首先,创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata
docker run -it -v /dbdata --name dbdata ubuntu
可以在其他容器中使用--volumes-from来挂载dbdata容器中的数据卷,例如创建db1和db2两个容器,并从dbdata容器挂载数据卷:docker run -it --volumns-from dbdata --name db1 ubuntu

5、基本使用
版本查看:docker version
镜像拉取:docker pull
镜像查询:docker image
镜像删除:docker rmi nginx
容器运行:docker run
端口映射:docker run -p 3306:3306
挂存储卷:docker run -v
进入容器:docker exec it container_id /bin/bash
查看容器日志:(1)进入容器查看(2)退出容器查看docker logs -f container_id
查询容器:docker ps(运行中的容器) ,docker ps -a(所有的容器)
设置环境变量:设置启动的变量,如设置mysql root的密码
查询环境变量,可以在docker_hub上查询说明
容器停止:docker stop container_id
容器删除:docker rm container_id
仓库登录:docker login
镜像构建:docker build -t lala:1.0 -f /root/Dockerfile
镜像打tag:docker tag mysql:5.6 myregistry(镜像仓库的名字)/mysql:1.0
镜像推送:docker push myregistry(镜像仓库的名字)/mysql:1.0
进入容器有两个命令:attach和exec
docker attach 容器id:进入容器,使用exit退出时,容器会终止
docker exec -it 容器id bash:进入容器,使用exit退出时,容器不会终止(推荐)

5、dockerfile语法
FROM、RUN、 CMD/ENRTYPOINT、 EXPOSE
FROM:基础镜像
RUN:命令
ADD:拷贝文件
WORKDIR:设置工作目录
CMD:运行工作目录下的程序
EXPOSE:端口暴露5000

6、安装docker-compose

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

将可执行权限应用于二进制文件:
sudo chmod +x /usr/local/bin/docker-compose

创建软链:

$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试是否安装成功:

$ docker-compose --version

6、具体例子
(1)安装nginx并进行配置
docker search nginx
docker pull nginx
创建挂载目录
mkdir /home/wms/nginx
运行并挂载nginx
docker run -d -p 80:80 --name nginx_wms_ui -v /home/wms/nginx/dist:/usr/share/nginx/html --restart=always nginx
重启容器
docker restart 容器ID
可以看到页面啦。
进入容器目录
docker exec -it 容器ID /bin/bash
进入cd /etc/nginx/conf.d查看nginx配置文件
优化配置文件
docker cp nginx_wms_ui:/etc/nginx /home/
删除容器
docker rm 容器ID
运行命令启动
docker run --name nginx_wms_ui -p 80:80 -v /home/wms/nginx/dist:/usr/local/vue/dist -v /home/nginx:/etc/nginx -d nginx
–name:后面的是容器名称
-p:冒号前面是宿主机的对外端口,冒号后面的是容器的端口
-v:冒号前面的是宿主机的文件目录,冒号后面是容器的内部文件目录
-d:表示后端运行
nginx:最后面的nginx是镜像的名称
现在已经把宿主机的vue项目dist挂载到nginx容器中,这样监听的请求就会被nginx代理到对应的目录中访问资源,还有宿主机的/home/nginx也被挂载到了容器etc/nginx中,这样只要修改宿主机的nginx配置,只要重启容器最新配置就会生效。
(2)安装jenkins
docker run --name jenkins -u root --rm -d -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean
如果没改端口号的话,安装完成后访问地址:
http://{部署Jenkins所在服务IP}:8080

进入Jenkins容器

docker exec -it {Jenkins容器名} bash

例如 docker exec -it jenkins bash

查看密码

cat /var/lib/jenkins/secrets/initialAdminPassword

复制密码到输入框里面


stray
129 声望10 粉丝

« 上一篇
js问题(杂)
下一篇 »
k8s(杂记)