> #如果你有某个需求点
> 请 Ctrl+F 进行查找
进入centos系统命令
参考地址
安装
sudo yum install -y yum-utils
device-mapper-persistent-data
lvm2
sudo yum-config-manager
–add-repo
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce
启动
重启docker
查看是否安装成功
验证
完成第一步
查看docker环境里image
如何创建一个 image
如何通过第三方 创建image
###自己如何搭建 base image
创建官方 hello-world image
执行 hello-world
创建文件夹
进入该文件夹
创建一个后缀为.c的文件
安装 gcc和glibc-static包来编辑c文件
sudo yum install gcc
sudo yum install glibc-static
通过gcc和 -static去编译hello.c 变成可执行的hello文件
执行编译后的文件
在当前文件夹里创建一个名为Dockerfile的文件
执行该文件
###什么是Container
查看当前正在运行的容器
查看当前运行并退出的所有容器
docker container ls -a
docker ps -a
删除一个 运行并退出的容器
docker container rm ID(ID的一部分)
docker rm ID
查看所有容器的ID
删除所有的容器
删除一个镜像
如何将容器container转换成镜像image
如何将image镜像转换成容器container
创建目录
mkdir Name
cd Name
vim Dockerfile
FROM centos RUN yum install -y vim
docker build -t home/centos-vim-new .
通过当前安装 上面写好的文件内容 镜像为home/contos-vim-new
注意:如果你是通过docker file生成的镜像,那么在分享的时候就可以只分享我们的docker file ,别人就可以build成跟你一样的docker file
FROM
尽量使用官方的image作为base image
LABEL
作者 描述等等
Metadata 不可少 一定要有一下镜像的基础信息
RUN
为了美观尽量把多行代码合并成一行
通过 && 符号链接
通过 \ 换行
WORKDIR
创建目录
尽量使用 WORKDIR 不要使用RUN cd
尽量使用绝对路径
ADD and COPY
ADD 不光可以添加文件而且还可以解压缩
大部分情况下,COPY是优先于ADD的。ADD除了COPY还有其他的功能(解压缩),添加远程文件/目录请使用curl或者wget
ENV
MYSQL 5.6
“${MYSQL}”
尽量使用ENV增加可维护性
VOLUME and EXPOSE
RUN
执行命令并创建新的image layer
CMD
设置容器启动后默认执行的命令和参数
如果docker run 指定了其他命令,cmd命令会被忽略
ENTRYPOINT
设置容器启动时运行的命令
让容器以应用或者服务的形式运行
不会被忽略,一定执行
前提:你必输hub.docker的账号。
镜像的名字最好是,“用户名/镜像名”
> 假如你的hub账号的用户名是Aaron,上传镜像的名字是hell,那么你在本地镜像的名字应该为 Aaron/hell.
终端登录
docker login
上传镜像
docker push Aaron/hell:latest
注意:我们上面push的文件是不安全的,最安全的方式是push dockerfile文件
搭建属于自己的dockerhub
registry 镜像
more app.py
查看文件内容
后台运行
docker run -d id/name
docker run -d --name=deme id/name
如何进入正在运行的程序
docker exec -it ID /bin/bash
查看后台进程
ps -ef | grep python
打开指定程序运行的ip
docker exec -it ID ip a
停止正在运行的容器
docker stop ID
docker stop demo
name and ID 是一样的,一个唯一的名字
启动 容器
docker start demo
展开容器的详细信息
docker inspect ID
查看容器运行的信息
docker logs ID
安装stress
stress 压力测试
查看 stress在哪里
which stress
stress 帮助
stress --help
进程
–vm #进程
–vm-bytes #为每个进程分配多大内存 默认是256M内存
–verbose #查看分配dbug
查看共有内存
top
如何通过stress去打包创建一个image
vim Dockerfile
FROM ubuntu
RUN apt-get update && apt-get install -y stress
ENTRYPOINT ["/usr/bin/stress"]
CMD []
储存为200 线程为1
docker run --memory=200M id/name --vm 1 --verbose
如果碰到 启动了进程但是有些进程错误,可以再开个 终端,查看正在运行的进程-docker ps,停止错误进程-docker stop。
内存为500 线程为1
docker run --memory=200M id/name --vm 1 --verbose --vm-bytes 500M
cpu 全占
docker run --cpu-shares=10 --name-name1 id/name --cpu 1
docker run --cpu-shares=5 --name-name2 id/name --cpu 1
上面所叙述的是:name1、2共占CPU1的100%,而name1占的是name2的2倍
Docker Netwoork
Bridge Network
Host Network
None Network
Overlay Network
Docker 持久化数据的方案
基于本地文件系统对的Volume。可以在执行Docker create或 Docker run 时,通过 -v 参数将主句的目录作为容器的数据卷。这部分功能便是基于本地文件系统的volume管理。
基于plugin的Volume,支持第三方的存储方案,比如NAS,aws
Volume的类型
受管理的data Volume ,由docker后台自动创建。
绑定挂载的 Volume,具体挂载位置可以由用户指定
数据持久化:Data Volume
创建一个没有密码的volume
sudo docker run -d --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
sudo docker volume ls
sudo docker volume inspect VOLUME
sudo docker stop mysql1 mysql2
sudo docker rm mysql1 mysql2
及时你停止和移除了容器,但是volume还在
sudo docker volume rm VOLUMENAME
sudo docker run -d -v mysql:/var/lib/mysql --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
注:跟第一步相比 增加了 -v mysql:/var/lib/mysql 意思就是 只要是在此目录安装的MySQL ,就遵循 --name 的名字
sudo docker exec -it mysql1 /bin/bash
mysql -u root
show databases
create database aaron
sudo docker rm -f mysql1
注意:上面只是删除了MySQL 但是volume还在。当你在重新创建一个mysql容器时,这个容器同样会使用上次的volume。
1 and 2的区别
第一中必须去创建一个Date volume 并指明存放的路径
而第二种,只要指明数据存放的路径就行,但是这个路径是本地和虚拟环境保持同步一致,一个发生个改变另一个也发生改变。
如何去操作正常的流程呢
cd labs/docker-nginx/
第二步 build 一个image名字为 aaronfuxinhan/my-nginx
第三步 创建容器
docker run -d -p 80:80 --name web aaronfuxinhan/my-nginx
curl 127.0.0.1
如何去操作同步的流程呢
docker run -d -v $(pwd):/usr/share/nginx/html -p 80:80 --name web aaronfuxinhan/my-nginx
注意:现在 你在里面操作任何东西,容器里的和本地 都会进行同步
验证是否能同步
进入容器文件
docker exec -it web /bin/bash
touch text.txt
查看文件 ls
退出容器 exit
查看文件 ls
如果一样同步成功
进入5章的 flask-skeleton build flask-skeleton 成image
pull wordpress 镜像image
docker pull wordpress
创建一个完整的 MySQL
docker run -d --name mysql -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=wordpress
-d 后台运行
-v volume:本地地址映射容器地址
-e 后面参数 具有选择性
-p 端口映射
docker run -d -e WORDPRESS_DB_HOST=mysql:3306 --link mysql -p 8080:80 wordpress
docker ps #可以看到两个容器在运行一个WordPress一个MySQL
出现 wordpress安装页面,代表成功了
什么是docker compose
Docker compose 是一个工具
这个工具可以通过一个yml文件定义对个容器的docker应用
通过一条命令既可以根据yml文件的定义去停止和删除多个容器
如何去编写这个yml文件
yml文件默认的文件名是:docker-compose.yml
yml 文件的三大概念
一个service代表一个container,container可以通过hubdocker直接pull,也可以通过Dockerfile build出来image。
Service 的启动类似docker run ,我们可以给其指定nerwork和volume,所以可以给service 指定 nitwork 和Volume 的引用
安装docker-compose
sudo curl -L “https://github.com/docker/compose/releases/download/1.22.0/docker-compose- ( u n a m e − s ) − (uname -s)- (uname−s)−(uname -m)” -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
如何启动yml 文件
docker-compose -f 文件名 up
docker-compose 命令
docker-compose ps
docker-compose stop
docker-compose start
docker-compose down # 启动和移除
docker-compose --help
docker-compose up --scale web=3 -d
后台增加或减少web服务 为3个,
创建Dockerfile文件
vim Dockerfile
build Dockerfile文件成image
docker build -t aaron/doncker .
运行 image文件
docker run aaron/docker
如何查看notebook5的历史日志
sudo docker logs -f notebook5
查看固定几条
sudo docker logs --tail 5 notebook5
将本地文件映射到docker上 (服务器后天不会自动运行Ctrl+c暂停)
sudo docker run -d -p 8889:8888 --name notebook5 -v /home/ubuntu:/opt/app/data mikebirdgeneau/jupyterlab
服务器后天运行 本地路径:docker原路径
sudo docker run -d -P --name notebook5 -v /home/ubuntu:/opt/app/data jupyter/all-spark-notebook
docker port notebook5 8888
生成密码
ipython 或者 python
都可以,能进去python就可以
在python命令行里分别输入:
from notebook.auth import passwd
passwd()
成功:一次输入Enter和verify password
得到:‘sha1:2c863f45bd3d:13338f98af695a0f82c8b5499e3adb7c978e9d20’
存好:等下用 退出python
生成jupyter notebook的配置文件
jupyter notebook --generate-config
修改配置文件
vim ~/.jupyter/jupyter_notebook_config.py
安装 vim :
apt-get install vim
加入如下内容,其中sha1那一串秘钥是上面生成的那一串
c.NotebookApp.ip=’*’
c.NotebookApp.password = u’sha1:41e4da01dde4:e820dc9c0398eda2dc9323c9e4a51ea1228166a2’
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888