Docker学习

docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,
然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

优点:1.提高效率,方便快捷(容器系统资源开销低) 2.沙箱机制,互不干扰 3.集群部署,负载均衡

Client docker CLI(命令行界面工具的客户端)-->REST API-->docker daemon(服务器,守护进程)

swarm:docker容器的集群和调度工具。

安装docker:
root账户进入/etc/apt/:
curl -sSL https://get.daocloud.io/docker | sh(ps:安装比较慢,请耐心等待)
将zhangmy用户加入docker组:
sudo usermod -aG docker zhangmy(重新登录即可查看docker version,代表加入组成功)
配置docker加速器(root):
vi /lib/systemd/system/docker.service
将ExecStart行改为ExecStart=/usr/bin/dockerd --registry-mirror=https://46bhkvuo.mirror.aliyuncs.com
systemctl daemon-reload
service docker restart
systemctl status docker.service

克隆docker虚拟器。

用docker容器打印:docker run ubuntu:15.10 /bin/echo "Hello World"

查看docker镜像:docker images

查看运行中的容器:docker ps

查看容器:docker ps -a

删除容器:docker rm (容器id)

运行ubuntu:15.10进入容器内:docker run -it ubuntu:15.10 /bin/bash

容器在宿主机上运行。

死循环容器:docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello docker; sleep 1; done"

停止容器运行:docker stop (容器id)

查看更多的docker命令:docker command --help

docker run -d -P training/webapp python app.py
docker 运行 在后台 将容器映射到数组机上 镜像为training/webapp python命令 启动app.py

docker run -d -p 8888:5000 training/webapp python app.py 发布到8888端口下。

查看容器进程:docker top 容器id(或名称)

查看容器进程的底层信息:docker inspect 容器id(或名称)

交互式进入docker容器:docker exec -it 容器id(或名称) /bin/bash

docker hub镜像仓库

获取tomcat镜像:docker pull tomcat(可以+:+tomcat版本)

查找镜像:docker search tomcat(ps:[ok]代表官方的版本 stars代表使用次数)

更新镜像配置数据源并保存:
docker run -it ubuntu:15.10 /bin/bash
cd /etc/apt
echo deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse > sources.list
echo deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse >> sources.list
echo deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse >> sources.list
echo deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse >> sources.list
cat sources.list
apt-get update
apt-get install vim
apt-get update
exit
docker commit -m"install vim" -a="zhangmy" 镜像id zhangmy/ubuntu:v2
docker images(即可查看到镜像已保存)

创建镜像:
root进入/usr/local创建/docker/myubuntu目录
vi Dockerfile
输入:
FROM ubuntu:15.10
MAINTAINER 1395471669@qq.com
RUN /bin/bash -c 'echo "Hello World"'
COPY test.txt /home
WORKDIR /home
EXPOSE 80
EXPOSE 8080
CMD [" /bin/echo", " this is a echo test"]
docker build -t zhangmy/myubuntu .

设置镜像标签:docker tag 镜像id zhangmy/myubuntu:v2(即可新增一个标签[TAG]为v2的镜像)

删除镜像:docker rmi 镜像id

tomcat启动:
docker run --name tomcat -p 8080:8080 -d tomcat
使用docker运行一个名字叫做tomcat的容器将宿主机的8080端口映射到容器的8080端口,在后台运行使用tomcat镜像。
交互式进入tomcat容器,将项目发布在webapps里即项目发布成功。

安装mysql(ps:root账户):
docker pull mysql
{docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql
下面的不能用用这个,再交互式修改mysql的root账户密码:
docker exec -it mysql /bin/bash
mysql -u root -p
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
}
docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql
ps:-p指定映射端口 --name指定容器名称 -v指定数据卷 -e指定环境变量 -d后台运行

部署docker项目:
将项目的sms_op.war包上传到download
cd /usr/local/docker/tomcat/sms_op
vi Dockerfile
FROM tomcat
MAINTAINER zhangmy
ADD sms_op.war /usr/local/tomcat/webapps/sms_op.war
mv sms_op.war /usr/local/docker/tomcat/sms_op
docker build -t zhangmy/sms_op .
docker run -it zhangmy/sms_op /bin/bash
修改数据库连接池(依据项目进行修改)。
docker run --name sms_op -d -p 8080:8080 zhangmy/sms_op

重启容器:docker restart 容器id

查看容器日志:docker logs 容器id

创建数据卷:docker run --name tomcat1 -d -p 8080:8080 -v /usr/local/docker/tomcat/share/webapps/($PWD当前目录):/usr/local/mysql/webapps/ tomcat

备份数据(root进入/usr/local/docker/mysql):tar -zcvf backup.tar.gz .(打包当前目录)

将备份数据放置新服务器里对应的地方。 即可恢复数据

Docker Compose:简化docker应用程序的工具。可以用来配置应用程序的服务。

安装docker compose:
去github网站https://github.com/docker/compose/releases下载linux的Latest release版本。
将docker-compose文件放在/usr/bin/目录下:mv docker-compose /usr/bin/
chown -R root:root docker-compose
chmod +x docker-compose
cd /usr/bin/dockerd/tomcat
vi docker-compose.yml
输入:
version: '3'
services:
tomcat:
restart: always
image: tomcat
container_name: tomcat
ports:
- 8080:8080
docker-compose up(ps:即可启动tomcat容器)

删除容器:docker-compose down

数据卷使用(在docker-compose.yml文件下加入如下):
volumes:
- /usr/local/docker/tomcat/webapps/:/usr/local/tomcat/webapps
environment:
TZ: Asia/Shanghai

docker-compose运行mysql镜像:
version: '3'
services:
mysql:
restart: always
image: mysql
container_name: mysql
ports:
- 3306:3306
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123456
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--max_allowed_packet=128M
volumes:
- mysql-data:/var/lib/mysql

volumes:
mysql-data:

docker-compose部署项目:
version: '3'
services:
tomcat:
restart: always
image: tomcat
container_name: tomcat
ports:
- 8080:8080
volumes:
- /usr/local/docker/zhangmy/webapps/:/usr/local/tomcat/webapps
environment:
TZ: Asia/Shanghai

mysql:
restart: always
image: mysql
container_name: mysql
ports:
- 3306:3306
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123456
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--max_allowed_packet=128M
volumes:
- mysql-data:/var/lib/mysql

volumes:
mysql-data:
再将打包的项目放在zhangmy/webapps/ROOT/下即可运行容器。