什么是Docker?
这条比较好可以先看看:https://baijiahao.baidu.com/s?id=1591887487395526427&wfr=spider&for=pc
- Docker is the world’s leading software containerization platform(Docker是世界领先的软件容器平台)
- Docker公司开发、开源、托管在GitHub
- 跨平台,支持windows、Macos、Linux
Docker思想 - 集装箱
- 标准化
运输方式
存储方式
API接口 - 隔离
Docker解决的问题 - 解决了运行环境不一致所带来的问题
- 隔离性,多个用户之间的资源不共用,每个用户都有自己的一块资源
- 标准化,能够快速扩展,弹性伸缩
三个词汇:Build、Ship、Run
Docker镜像
Docker仓库
- hub.docker.com
- c.163.com
- 自己搭建
Docker安装(Linux)
在centos和redhat上安装docker
http://www.imooc.com/article/16448
在ubuntu上安装docker
1.检查内核版本
uname -r
2.切换到root用户下
su
3.保证apt -get是最新版本
apt-get update
4.安装docker.io
apt-get install docker.io
5.如果安装最新版本
curl -s https://get.docker.com|sh
6.查看版本
docker version
7.发现Cannot connect to the Docker daemon. Is the docker daemon running on this host?需要启动服务
service docker start
8.再查看docker版本
docker version
会看到以下结构
Client:
Version: 1.12.3
xxx
Server:
Version 1.12.3
xxx
说明安装成功。
第一个docker镜像
1.镜像拉取:
docker pull [OPTIONS] NAME[:TAG]
2.查看本机镜像
docker images [OPTIONS] [NAME[:TAG]]
docker容器
1.运行镜像
docker run [OPTIONS] NAME[:TAG] [COMMAND][ARG...]
Docker运行Nginx
持久运行的容器
前台挂起&后台运行
进入容器内部
1.拉取nginxjingx
docker pull hub.163.com/library/nginx:latest
docker images
//在前台启动一个镜像
docker run hub.c.163.com/library/nginx
2.查看机器上正在运行的容器
docker ps
3.后台运行镜像
docker run -d
//Run container in background and print container
返回一个容器id, containerid
4.进入容器内部
docker exec -it f4 bash //f4是容器id前缀
进入了一个类似于Linux系统的结构
which nginx //找nginx路径
ps -ef //查看进程
exit //退出
5.停止镜像
docker stop f4
端口映射
1.映射到指定端口
docker run -d -p 8080:80 hub.c.163.com/library/nginx //80是容器的端口,8080是映射到主机的端口
netstat -na:grep 8080
2.映射到随机端口
docker run -d -P hub.c.163.com/library/nginx
docker ps //可以查看到随机端口
制作自己的镜像
Dockerfile
docker build
Jpress: http://jpress.io/
1.创建dockerfile
touch Dockerfile
vi Dockerfile
docker pull hub.c.163.com/library/tomcat:latest
注意:可以到你要拉取镜像的仓库网站上找到镜像的信息和使用方式
from hub.c.163.com/library/tomcat
MAINTAINER xiaochuan xxx@1163.com
COPY jpress.war /usr/local/tomcat/webapps
docker build .
这样再运行docker images会发现镜像没有名字,执行以下(name:tag)命令可以增加名字和版本,REPOSITORY->jpress; TAG->latest
docker build -t jpress:latest .
镜像重命名
docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)
运行
docker run -d -p 8888:8080 jpress
docker ps
netstat -na:grep 8888
访问以下
http://localhost:8888/jpress
发现需要mysql
拉取MySQL镜像
docker pull hub.c.163.com/library/mysql:latest
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=000000 -e MYSQL_DATABASE=jpress hub.c.163.com/library/mysql:latest
docker ps
netstat -na:grep 3306
重启容器
docker restart xxx..
其他问题:
https://www.itency.com/topic/show.do?id=479285
https://blog.csdn.net/quuqu/article/details/51488966
私库登陆出现问题:
https://blog.csdn.net/mustimproved/article/details/54633488
目录映射等问题:
http://www.runoob.com/docker/docker-run-command.html
解决docker容器中文乱码:
https://www.cnblogs.com/z-belief/p/6148463.html
Docker容器和主机如何互相拷贝传输文件:
https://blog.csdn.net/u011596455/article/details/76862271
docker容器挂载宿主主机目录:
https://blog.csdn.net/zero__007/article/details/80641616
https://www.cnblogs.com/xiaochangwei/p/8205067.html
sudo docker run -d -p 8010:8081 -v /home/wsn/services/monitor-center/docker2/monitor-center:/home/ubuntu/monitor-center 2e42
docker镜像内的文件与本地文件互相拷贝:
https://blog.csdn.net/hewei_bj/article/details/80200050
修改docker时区1(此种方法貌似不行):
monitor-center:
sudo docker cp /etc/localtime 98f5:/etc
可能因为版本的问题或者挂载目录的问题对于monitor-center用上面的命令不好使,用以下方法:
把本地的/etc/localtime先copy到挂载目录中,在进入容器内部将localtime剪切到/etc中。
修改docker时区:
docker run -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime -ti xxx bash
保存镜像到本地:
docker save > scan_iie_4.0.tar.gz scan_iie:4.0
加载本地镜像:
docker load < scan_iie_4.0.tar.gz