特性 |
容器 |
虚拟机 |
启动 |
秒级 |
分钟级 |
硬盘使用 |
一般为 MB |
一般为 GB |
性能 |
接近原生 |
弱 |
系统支持量 |
单机支持上千个容器 |
一般几十个 |
容器三大基本概念
镜像 image
容器 container
仓库 repository
docker整个生命周期就是这三个概念。 安装docker
1.卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine 2.设置存储库
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.安装docker社区版
sudo yum install docker-ce
4.启动关闭docker
systemctl start docker
docker 镜像加速
#一条命令加速
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io
docker基础命令注释
[root@docker ~]# docker --help Usage:
docker [OPTIONS] COMMAND [arg...] docker daemon [ --help | ... ] docker [ --help | -v | --version ] A
self-sufficient runtime for containers. Options: --config=~/.docker Location of client config files #客户端配置文件的位置 -D, --debug=false Enable debug mode #启用Debug调试模式 -H, --host=[] Daemon socket(s) to connect to #守护进程的套接字(Socket)连接 -h, --help=false Print usage #打印使用 -l, --log-level=info Set the logging level #设置日志级别 --tls=false Use TLS; implied by--tlsverify # --tlscacert=~/.docker/ca.pem Trust certs signed only by this CA #信任证书签名CA --tlscert=~/.docker/cert.pem Path to TLS certificate file #TLS证书文件路径 --tlskey=~/.docker/key.pem Path to TLS key file #TLS密钥文件路径 --tlsverify=false Use TLS and verify the remote #使用TLS验证远程 -v, --version=false Print version information and quit #打印版本信息并退出 Commands: attach Attach to a running container #当前shell下attach连接指定运行镜像 build Build an image from a Dockerfile #通过Dockerfile定制镜像 commit Create a new image from a container's changes #提交当前容器为新的镜像 cp Copy files/folders from a container to a HOSTDIR or to STDOUT #从容器中拷贝指定文件或者目录到宿主机中 create Create a new container #创建一个新的容器,同run 但不启动容器 diff Inspect changes on a container's filesystem #查看docker容器变化 events Get real time events from the server#从docker服务获取容器实时事件 exec Run a command in a running container#在已存在的容器上运行命令 export Export a container's filesystem as a tar archive #导出容器的内容流作为一个tar归档文件(对应import) history Show the history of an image #展示一个镜像形成历史 images List images #列出系统当前镜像 import Import the contents from a tarball to create a filesystem image #从tar包中的内容创建一个新的文件系统映像(对应export) info Display system-wide information #显示系统相关信息 inspect Return low-level information on a container or image #查看容器详细信息 kill Kill a running container #kill指定docker容器 load Load an image from a tar archive or STDIN #从一个tar包中加载一个镜像(对应save) login Register or log in to a Docker registry#注册或者登陆一个docker源服务器 logout Log out from a Docker registry #从当前Docker registry退出 logs Fetch the logs of a container #输出当前容器日志信息 pause Pause all processes within a container#暂停容器 port List port mappings or a specific mapping for the CONTAINER #查看映射端口对应的容器内部源端口 ps List containers #列出容器列表 pull Pull an image or a repository from a registry #从docker镜像源服务器拉取指定镜像或者库镜像 push Push an image or a repository to a registry #推送指定镜像或者库镜像至docker源服务器 rename Rename a container #重命名容器 restart Restart a running container #重启运行的容器 rm Remove one or more containers #移除一个或者多个容器 rmi Remove one or more images #移除一个或多个镜像(无容器使用该镜像才可以删除,否则需要删除相关容器才可以继续或者-f强制删除) run Run a command in a new container #创建一个新的容器并运行一个命令 save Save an image(s) to a tar archive#保存一个镜像为一个tar包(对应load) search Search the Docker Hub for images #在docker
hub中搜索镜像 start Start one or more stopped containers#启动容器 stats Display a live stream of container(s) resource usage statistics #统计容器使用资源 stop Stop a running container #停止容器 tag Tag an image into a repository #给源中镜像打标签 top Display the running processes of a container #查看容器中运行的进程信息 unpause Unpause all processes within a container #取消暂停容器 version Show the Docker version information#查看容器版本号 wait Block until a container stops, then print its exit code #截取容器停止时的退出状态值 Run 'docker COMMAND --help' for more information on a command. #运行docker命令在帮助可以获取更多信息
dockefile的学习
指令如下
#你的项目依赖于什么操作系统,这里就指定什么操作系统
FROM scratch #制作base image 基础镜像,尽量使用官方的image作为base image
FROM centos #使用base image
FROM ubuntu:14.04 #带有tag的base image #label标签 ,告诉别人,这个dockerfile是谁写的
LABEL version=“1.0” #容器元信息,帮助信息,Metadata,类似于代码注释
LABEL maintainer=“yc_uuu@163.com" #run指令是一个万能指令 #对于复杂的RUN命令,避免无用的分层,多条命令用反斜线换行,合成一条命令!
RUN yum update && yum install -y vim \
Python-dev #反斜线换行
RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME” #
WORKDIR /root #相当于linux的cd命令,改变目录,尽量使用绝对路径!!!不要用RUN cd
WORKDIR /test #如果没有就自动创建
WORKDIR demo #再进入demo文件夹
RUN pwd #打印结果应该是/test/demo # ADD是可以将本地代码,添加到容器空间内
# ADD不仅仅是添加,还可以解压缩文件,注意!! ADD and COPY
ADD hello / #把本地文件添加到镜像中,吧本地的hello可执行文件拷贝到镜像的/目录
ADD test.tar.gz / #添加到根目录并解压 WORKDIR /root
ADD hello test/ #进入/root/ 添加hello可执行命令到test目录下,也就是/root/test/hello 一个绝对路径 #copy 就是将宿主机的文件,拷贝到容器空间内,且没有解压效果 COPY hello test/ #等同于上述ADD效果 ADD与COPY
- 优先使用COPY命令
-ADD除了COPY功能还有解压功能 添加远程文件/目录使用curl或wget ENV #环境变量,尽可能使用ENV增加可维护 ENV MYSQL_VERSION 5.7 #设置一个mysql常量 RUN yum install -y mysql-server=“${MYSQL_VERSION}”
#dockerfile实战,构建自己的flaks镜像 1.准备一个flask代码文件,内容如下
cat s18-flask.py
#coding:utf8
from flask import Flask
app=Flask(__name__)
@app.route('/')
def hello():
return "hello,i am docker"
if __name__=="__main__":
app.run(host='0.0.0.0',port=8080) 2.编写dockerfile
FROM centos #指定centos基础镜像
COPY CentOS-Base.repo /etc/yum.repos.d/ #拷贝宿主机的文件,到容器空间下
COPY epel.repo /etc/yum.repos.d/ #拷贝宿主机的文件,到容器空间下
RUN yum clean all #执行清空yum缓存的命令
RUN yum install python-setuptools -y #想安装python依赖工具
RUN easy_install flask #是想让docker自动的帮咱们安装python2的flask模块
COPY s18-flask.py /opt/ #把本地的代码文件,拷贝到容器的/opt目录下
WORKDIR /opt #进入到/opt目录下
EXPOSE 8080 #暴露容器的8080端口,供给外部宿主机去访问
CMD ["python","s18-flask.py"] #cmd代表你要执行的命令 3.构建build这个dockerfile
确保文件都准备好了,如下所示
[root@wangdachui s18dockerfile]# ls
CentOS-Base.repo Dockerfile epel.repo s18-flask.py 4.构建dockerfile
docker build . 5.通过自己构建的镜像,运行一个flask程序
docker run -d -it --name flask -p 5555:8080 s18-flask 6.通过浏览器去访问linux宿主机的 5555端口,即可访问到flask程序
docker 仓库 构建 私有镜像
1.下载docker私有镜像
docker pull registry
2.修改docker的配置文件
#修改如下配置文件
vim /etc/docker/daemon.json
修改内容如下
{"registry-mirrors": ["http://95822026.m.daocloud.io"],
"insecure-registries":["192.168.226.128:5000"]
}
3.修改docker的service配置文件,让它加载/etc/docker/daemon.json
修改如下文件
vim /lib/systemd/system/docker.service
添加如下配置到 [service]代码块中
EnvironmentFile=-/etc/docker/daemon.json
4.重启docker的服务
systemctl daemon-reload
systemctl restart docker
5.重新启动一个私有镜像仓库的容器实例
docker run --privileged=true -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry
--privileged=true docker容器的安全机制:设置特权级运行的容器
6.推送本地镜像,到私有仓库中
docker push 192.168.226.128:5000/s18-hello-world
7.检查docker私有仓库的api地址,检查json数据
http://192.168.226.128:5000/v2/_catalog
8.尝试下载私有仓库的镜像
docker pull 192.168.226.128:5000/s18-hello-world
rabbitmq 消息队列的学习
注意,保证服务器的内存足够,磁盘足够,以及删除/etc/hosts中没有用的dns解析
1.优点,能够保证消息数据持久化,不丢失 安装学习rabbitmq消息队列,配置好阿里云的yum源 1.yum -y install erlang rabbitmq-server 2.启动rabbitmq服务端
systemctl start rabbitmq-server 3.开启rabbitmq的web控制台
rabbitmq-plugins enable rabbitmq_management 4.重启后生效web界面
http://192.168.226.128:15672/ 5.创建rabbitmq用户
sudo rabbitmqctl add_user yangyang 123
6.设置用户的权限,为admin管理员权限
sudo rabbitmqctl set_user_tags yangyang administrator 7.允许yangyang这个用户对所有的队列进行读写
sudo rabbitmqctl set_permissions -p "/" yangyang ".*" ".*" ".*" 8.可以用yangyang登录 rabbitmq的后台界面管理了 rabbitmq练习ack机制,消息队列持久化,查看博客
https://www.cnblogs.com/pyyu/p/10318053.html