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. 常见的Java不规范代码

    1.格式化源代码 Ctrl + Shift + F – 格式化源代码. Ctrl + Shift + O – 管理import语句并移除未使用的语句 除了手动执行这两个功能外,你还可以让Eclipse ...

  2. css样式表---样式表分类、选择器

    一.样式表分三类: 1.内联样式表.——放在元素的开始标记中.——只对当前元素起作用.<input name="txt" style="border:0px; bo ...

  3. 使用VSCode调试Javascript的三种方式

    Code Runner 在应用商店中搜索Code Runner插件进行安装. 选中你要执行的Javascript脚本,右键选择Run Code,利用Console.log在下方的输出窗口里可以看到输出 ...

  4. SpringBoot:Shiro 整合 Redis

    前言 前段时间做了一个图床的小项目,安全框架使用的是Shiro.为了使用户7x24小时访问,决定把项目由单机升级为集群部署架构.但是安全框架shiro只有单机存储的SessionDao,尽管Shrio ...

  5. Qt QString的arg()方法的使用

    1.QString的arg()方法用于填充字符串中的%1,%2...为给定的参数,如 QString m = tr("); // m = "12:60:60: 2.它还有另外一种重 ...

  6. 3dmax2015卸载/安装失败/如何彻底卸载清除干净3dmax2015注册表和文件的方法

    3dmax2015提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装3dmax2015失败提示3dmax2015安装未完成,某些产品无法安装,也有时候想重新安装3 ...

  7. Python 装饰器 多装饰器同时装饰一个函数 多参数函数

    装饰器是在不修改源代码的情况下,使用装饰器增加原函数的功能. 在软件开发中有一个原则——"开放-封闭",简单地说就是已经实现的功能不允许被修改,但可以被扩展. 封闭:已经实现的功能 ...

  8. labview线程相关

    两个结论.     1. 在 LabVIEW 上编写多线程程序非常方便,我们应该充分利用这个优势.一般情况下,编写程序时应当遵循这样的原则:可以同时运行的模块就并排摆放,千万不要用连线,顺序框等方式强 ...

  9. [LC] 268. Missing Number

    Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...

  10. JDBC源码分析(加载过程)

    public static void main(String[] args) {     String url = "jdbc:mysql://172.16.27.11:3306/jdbcT ...