Docker

入门到精通

ssh root@39.101.184.220
"""
1)docker就是Linux上及其轻量的虚拟机 2)虚拟机是存在宿主系统中,通过镜像给宿主系统拓展子系统的(一个镜像理论上可以做n个子系统) 3)两个特别重要的概念
image:镜像
container:容器(子系统) 4)工作方式:
i)在服务器系统下载docker(为服务器安装虚拟机,服务器系统就是宿主系统)
ii)用docker去下载对应需求的镜像:镜像操作
iii)通过镜像制造容器(装子系统):容器操作 5)优势
i)超级轻量级,docker安装的容器体积可以按kB度量
ii)集群部署,docker可以通过一个镜像制造出多个一模一样的容器
iii)便捷管理所有镜像与容器(命令行操作) 6)镜像和容器特点
一般一个镜像中只包含一种软件:比如mysql镜像,创建的容器中只有mysql环境;redis镜像,创建的容器中只有redis环境
注:一个镜像中有多个环境的需要自己制作镜像
""" docker-ce : 免费(使用最多)
docker-ee :收费

CentOS安装Docker

方法一

设置管理Docker的仓库

"""
1)安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 2)安装稳定仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
"""

安装Docker Engine-Community

"""
1)安装
>: yum install docker-ce docker-ce-cli containerd.io 2)如果提示您接受 GPG 密钥,请允许
"""

方法二

"""
# centos7 安装docker
1 安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2 设置yum源为阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 3 安装
sudo yum install docker-ce -y
""" docker 版本:装的最新版
docker -v
Docker version 19.03.8, build afacb8b
docker -v查看版本,如果是17年之前的,就是老版本,操作习惯不一样

Docker基础命令

开启关闭

"""
1)启动
>: service docker start | systemctl start docker 2)关闭
>: service docker stop | systemctl stop docker 3)重启
>: service docker restart | systemctl restart docker
"""

查找镜像

# 查找镜像:https://hub.docker.com/
docker search helloworld
docker search centos # 拉取镜像
docker pull centos # 拉取最新的:相当于docker pull centos:latest
docker pull centos:centos7 # 拉取一个centos7
docker pull centos:centos6.7
docker pull centos:centos10 # 这个 没有,就报错

镜像操作

"""
1)列出镜像
>: docker image ls 2)拉取镜像
>: docker [image] pull 镜像名:版本
eg: docker image pull hello-world:latest # 最后一个版本 3)删除镜像
如果有容器了,可以强制删除镜像。不推荐这么做
>: docker image rm 镜像ID
>: docker image rm 镜像名字:镜像版本 # 通过名字删除
docker image rm centos:centos7 4)将容器反向打包镜像
>: docker save -o <文件名.tar> <镜像名> 5)根据打包的镜像文件加载镜像
>: docker load -i <文件名.tar>
"""

容器操作

"""
docker exec --help # 查看参数的含义 1)创建容器
>: docker run [选项参数] 镜像名 [命令]
创建容器命令:docker run
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
--name :为创建的容器命名。容器名字不能重
-v:表示目录映射关系(前者是宿主机目录,后者是容器的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射 # 演示
#基于哪个镜像跑容器:centos:centos7 如果写成centos表示跑最新的
#如果没有这个镜像呢?去远程拉,拉下来再跑,远程没有就报错 # 1.容器要运行(跑完进入了容器)
docker run -it --name=mycentos7 centos:centos7 /bin/bash
/bin/bash:进入容器,并开一个终端 bash:进入内层终端
exit: 退出一层 # 2.以守护进程形式跑(跑完没有进入容器)
docker run -di --name=mycentos2_2 centos:centos7 2)查看所有容器:-a就是--all代表全部展示
>: docker container ls [-a]
>: docker ps [-a] 3) 容器的启动与停止
docker stop 容器id/名字
docker start 容器id/名字
docker restart 容器id/名字 4)kill掉一个已经在运行的容器
>: docker kill 容器id 5)删除容器
停止后才能删除
>: docker rm 容器id 6)进入容器
1.exec(使用最多)
2.attach
3.ssh连接(容器要启动ssh服务22端口没有服务在监听)
>: docker exec 参数 容器id bash
eg: docker exec -it mycentos7 bash
eg: docker exec -it 685e1 bash
eg: docker exec mycentos2_2 ls # 在mycentos2_2的容器中执行ls,并打印结果
7)退出容器
>: exit
"""

文件拷贝

# 文件拷贝
# 从宿主机copy到容器内部
docker cp untitled3.tar mycentos2_2:/home
# 从容器内部copy出来
docker cp mycentos2_2:/home/untitled3.tar ./

目录映射(数据卷)

# 映射之后,操作宿主机目录和操作容器目录会相互影响

docker run -di  --name=mycentos2_3 -v /root/test:/home centos:centos7
名字 宿主机/root/test映射到容器 /home 版本

查看容器信息

docker inspect 容器名字/容器id
# 查看ip地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器id/名字

docker应用部署

# mysql服务 在docker中运行 -e表示环境变量,root密码
docker run -id --name=mysql1 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
# redis服务 在docker中运行
docker run -id --name=myredis -p 6379:6379 redis # docker中部署django项目 nginx + django +uwsgi

容器打包成镜像

# 把容器打包成镜像
docker run -di --name=mydjango python:3.6 # 安装django环境
pip install django==1.11.9
apt-get update
apt-get install vim # 把容器打包成镜像
docker commit 容器名字 镜像名字
docker commit mydjango mydjango_i # 基于镜像再跑起容器
docker run -di --name=mydjango2 mydjango_i # 镜像打成一个tar包,压缩一下(在当前目有个mydjango.tar)
docker save -o 压缩包名字.tar mydjango_i # copy这个压缩包到任意的机器上(装了docker)
# 把压缩包,恢复成镜像
docker load -i 压缩包名字.tar 容器里装了python3.6 mysql,django, uwsgi ,redis 项目在里面---》镜像--》容器 10个容器
django+uwsgi mysql redis 一个一个起:docker-compose
100台机器,10w容器 k8s

总结

# 容器的操作
查看正在运行的容器:docker ps
查看所有容器:docker ps -a
删除容器:docker rm 容器id/名字 容器id/名字 支持同时删多个
容器启动停止: docker stop/start/restart 容器名字/id
创建并启动容器:docker run -i -d -t --name=名字 -v 目录映射/数据卷 -p 端口映射/网络 镜像名字:tag
-镜像如果没有,会自动去拉取,然后启动
查看容器日志:docker logs 容器id/名字
文件拷贝: docker cp
查看容器信息,ip:docker inspect 容器名称(容器ID)
进入容器:docker exec -it 容器id /bin/bash
docker exec 容器id ls
ssh
attach

Docker file编写

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像,用来构建镜像的
# docker pull
# 通过容器---》打包成镜像--》压缩--》拿到任何位置
# 通过Dockerfile构建镜像
1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
3、对于运维人员:在部署时,可以实现应用的无缝移植。

docker file常用命令

命令	作用
FROM image_name:tag 定义了使用哪个基础镜像启动构建流程 # FROM 镜像名:版本
MAINTAINER user_name 声明镜像的创建者
ENV key value 设置环境变量 (可以写多条)
(核心)RUN command 是Dockerfile的核心部分(可以写多条)
eg:写要执行的命令(centos上装一个python3.6,原来在linux上装python,如何操作,就用命令一行一行写出来)
RUN wget http://www..../python.tar.gz
RUN tar -cvf python.tar.gz
RUN cd python
RUN make && make install
RUN pip3 install django==1.11.9
ADD source_dir/file dest_dir/file 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file 和ADD相似,但是如果有压缩文件并不能解压
WORKDIR path_dir 设置工作目录(上面操作的命令都是在这个目录,docker exec 进去,就在当前设置的路径下,之前是在根路径下)
CMD [命令] 容器一运行,就会执行命令
# ADD和COPY的区别?一个会解压,一个默认不会解压

eg:基于python3.6构建docker file镜像

# 写一个Dockerfile,基于python3.6 搭建运行环境:django,drf,uwsgi
# 名字必须交 Dockerfile ,当你构建的时候,会在当前路径下找这个文件,自动构建
vim Dockerfile FROM python:3.6
MAINTAINER lqz
ADD ./django_test.tar /home
RUN pip install -r /home/django_test/requirement.txt -i https://pypi.doubanio.com/simple
CMD ["/bin/bash"] # 基于docker file构建
docker build -t='django1.11.9' # django1.11.9就是构建完之后的镜像名字
构建完之后就有一个django1.11.9的镜像
# 基于该镜像构建容器
docker run -di --name=myproject -p 8080:8080 django1.11.9 # docker logs myproject 查看报错信息

容器部署项目,用 nuginx做负载均衡

# 1 在项目路径下写Dockerfile
FROM python:3.6
MAINTAINER lqz
ADD ./requirement.txt /home/
RUN pip install -r /home/requirement.txt -i https://pypi.douban.com/simple/
WORKDIR /home/django_test
EXPOSE 8080
VOLUME ["/home"]
CMD ["uwsgi", "--ini", "/home/django_test/uwsgi.ini"] # 2 在项目路径下写一个uwsgi.ini [uwsgi]
#也可以使用http
http=0.0.0.0:8080
#配置项目路径,项目的所在目录
chdir=/home/django_test
#配置wsgi接口模块文件路径
wsgi-file=django_test/wsgi.py
#配置启动的进程数
processes=4
#配置每个进程的线程数
threads=2
#配置启动管理主进程
master=True
#配置存放主进程的进程号文件
pidfile=uwsgi.pid # 3 传到git上(我们直接复制过去了) 在服务器从git上拉下来,解压开
# 4 基于docker file构建镜像
docker build -t='django1.11.9' . #5 运行起django+uwsgi的容器
docker run -di --name=mydjango1 -v /home/s13/myproject:/home -p 8080:8080 django1.11.9
docker run -di --name=mydjango2 -v /home/s13/myproject2:/home -p 8088:8080 django1.11.9 # 6 基于ngixn镜像跑起一个容器来,做目录映射(在宿主机,修改nginx的配置文件)
# 创建几个文件夹
mkdir -p /home/nginx/conf /home/nginx/html /home/nginx/logs
vim /home/nginx/conf/nginx.conf
#写入
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream node { # node名字随便取,下面需要用到
server 101.133.225.166:8080; # 1号服务器
server 101.133.225.166:8088; # 2号服务器
}
server {
listen 80;
server_name localhost;
location / {
#负载均衡配置
proxy_pass http://node; # 负载均衡,随机分发请求
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
} docker run --name nginx -id -p 80:80 -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/html:/etc/nginx/html -v /home/nginx/logs:/var/log/nginx nginx #7 访问http://101.133.225.166/, 会打到不通的docker容器内,即便有一个服务停了,也不会影响项目的运行 # 因为你django docker容器做了目录映射---》只需要修改代码,重启容器即可(git pull 即可)
# 不停服更新,停一半,更新,启动--在把另一半更新了
# 停服更新

Docker私有仓库搭建

# 镜像获取:
docker pull
dockerfile构建
拷贝tar文件,load过来 # 公司内部用的镜像,docker hub上没有,私服(私有服务器) # 操作步骤
# 1 拉一个registry镜像 (本质是个什么?web服务(想像成 web项目在里面))
docker pull registry
# 2 跑起容器来
docker run -di --name=registry -p 5000:5000 registry
# 3 浏览器输入地址(目前是空的)
http://宿主机:5000/v2/_catalog # 4 vi /etc/docker/daemon.json (文件如果没有就创建出来),以后docker pull 先从自己配置的这个拉,再去远程拉
{"insecure-registries":["10.0.0.200:5000"]} # 宿主机地址 # 5 重启docker 服务
systemctl restart docker # 6 启动容器
docker restart registry # 7 标记本地的镜像(可能是dockerfile构建的,也可能是通过容器打包成的)
docker tag django1.11.9 101.133.225.166:5000/django1.11.9
# docker tag redis 101.133.225.166:5000/myredis # 8 把标记好的本地镜像,传到私服
docker push 101.133.225.166:5000/django1.11.9
#docker push 101.133.225.166:5000/myredis # 9 再访问这个地址http://宿主机:5000/v2/_catalog
就能看到你上次的镜像再里面了 # 10 只要在etc/docker/daemon.json,配置了这个{"insecure-registries":["101.133.225.166:5000"]} 的所有小伙伴,都可以拉取我上传的镜像 docker pull 101.133.225.166:5000/myredis # 公司可能没有私服,直接通过dockerfile构建
# 大一点的公司,搭建私有仓库,里面放了一些镜像(不让你去docker hub下了,直接只从私有仓库下载)

Docker安装Mysql

"""
1)安装
>: docker image pull mysql:5.7 2)创建容器:root根用户的密码MYSQL_ROOT_PASSWORD采用的是root
>: docker container run -itd -p3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7 注:本地测试
>: mysql -hIP -P端口 -uroot -p密码 >: mysql -h 39.99.192.127 -P 3306 -u root -p
>: root
>: create database luffy default charset=utf8;
>: grant all privileges on luffy.* to 'luffy'@'%' identified by 'Luffy123?';
>: grant all privileges on luffy.* to 'luffy'@'localhost' identified by 'Luffy123?';
>: flush privileges;
"""

Docker安装Redis

"""
1)下载镜像
>: docker pull redis:4.0.9 2)创建容器
>: docker container run -itd -p6379:6379 redis:4.0.9
## : -p宿主端口(服务器):容器端口(通过镜像安装的) 3)进入容器
>: docker container exec -it <容器名称/容器ID> bash
eg: docker exec -it 685e1 bash 4)测试
>: redis-cli >: redis-cli -h 39.99.192.127 -p 6379
>: config set requirepass Admin123
"""

docker的安装使用的更多相关文章

  1. docker——容器安装tomcat

    写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...

  2. docker 启动安装等命令

    确认是否安装url whereis curl 启动docker服务: sudo service docker start sudo service docker stop 安装curl sudo ap ...

  3. DOCKER windows安装

    DOCKER windows安装 1.下载程序包 2. 设置环境变量 3. 启动DOCKERT 4. 分析start.sh 5. 利用SSH工具管理 6. 下载镜像 6.1 下载地址 6.2 用FTP ...

  4. 在docker里面安装部署应用

    最近一直在做docker的安装打包工作,学到不少东西,在博客里记一下. 环境centos6 ,docker 基础镜象centos6 1.创建本地基础镜象,安装基础命令包 (1)Dockerfile,D ...

  5. Docker Centos安装Redis以及问题处理

    之前一篇文章 Redis安装及主从配置 介绍了redis的安装配置,另一篇文件介绍了 Docker Centos安装Openssh .今天将两篇文件结合一下——在Docker Centos环境下搭建r ...

  6. Docker Centos安装Mysql5.6

    之前一篇随笔<Docker Centos安装Openssh> 写的是如何在基础的centos镜像中搭建ssh服务,在此基础上再搭建其他服务.本文继续介绍在centos_ssh基础上搭建my ...

  7. Docker的安装及简单使用

    1.  Docker的安装 (这里的“安装docker”其实就是安装Docker Engine) $ sudo apt-get intasll docker.io note: apt-get是ubun ...

  8. docker 的安装

    官方站点上有各种环境下的 安装指南,这里主要介绍下Ubuntu和CentOS系列的安装. Ubuntu 系列安装 Docker 通过系统自带包安装 Ubuntu 14.04 版本号系统中已经自带了 D ...

  9. docker 17 安装

    docker17 安装 新增一键安装命令: curl -sSL https://get.docker.com/ | sh 以下为手动安装过程 翻译自 Get Docker for Ubuntu Doc ...

  10. centos7安装docker并安装jdk和tomcat(常用命令)

    阿里专属的镜像加速 在宿主机器编辑文件:vi /etc/docker/daemon.json 阿里专属的镜像加速地址,类似于"https://91cntlkt.mirror.aliyuncs ...

随机推荐

  1. cesium初探之加载三维模型

    项目需要用到二三维地图切换,本来准备研究ArcGIS js for Web 3d,但考虑到版权的问题,决定试着用cesium来做,于是花了2天时间抱着试试看的心态把cesium从环境配置到加载三维模型 ...

  2. 框架之MyBatis

    什么是框架,简单的来说框架就是一个程序的半成品,而我们就是的工作就是根据我们的工作需要将其完善.MyBatis框架的作用就是将我们使用JDBC操作数据库的过程移交给MyBatis,让它来帮我们完成这些 ...

  3. AngularJS中格式化日期为指定格式字符串

    var date = $filter('date')(new Date(),'MM/dd/yyyy');

  4. 用两个栈实现一个队列(C++)

    分析 栈:后进先出 队列:先进先出 要使用两个栈实现队列(先进先出),主要思路是 1.插入一个元素:直接将元素插入stack1即可. 2.删除一个元素:当stack2不为空时 ,直接弹出栈顶元素,当s ...

  5. JQ主页图片划动切换效果

    .wrapper { width: 726px; float: left; } #jiao_dian { width: 980px; *height: 292px; margin-top: 10px; ...

  6. spring学习笔记四:spring常用注解总结

    使用spring的注解,需要在配置文件中配置组件扫描器,用于在指定的包中扫描注解 <context:component-scan base-package="xxx.xxx.xxx.x ...

  7. Protein interaction|insight QUANTA|SYBYL COMPOSER|MODELLER|SWISS_MODEL|WHAT IF|3D-JIGSAW|CPH-ModelGPCRs|Membrane protein|

    生命组学 蛋白质之间的互作可以有以下应用: Eg:改变蛋白质基因,从而组改变结构,削弱蛋白质之间的相互作用. Eg:数据模拟出蛋白质的靶点,即结合腔,将此数据存入结合化合物的dataset,用于制药 ...

  8. POJ 1251 & HDU 1301 Jungle Roads

    题目: Description The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign ...

  9. JS调用免费接口根据ip查询位置

    免费接口如下: 新浪的IP地址查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js 新浪多地域测试方法:http://in ...

  10. 关于文件下载Header设置

    常见的媒体格式类型如下: text/html : HTML格式text/plain :纯文本格式 text/xml : XML格式image/gif :gif图片格式 image/jpeg :jpg图 ...