文章目录
Docker容器的相关实践
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker环境的安装(Centos7)
升级内核
Docker要求Centos内核版本大于3.10,所以如果版本较低需要升级内核
先查看当前内核版本
uname -r
若版本不大于3.10,进行升级
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml
查看默认启动顺序
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
默认启动的顺序是从0开始,新内核是从头插入,所以需要选择0。
grub2-set-default 0
重启
reboot
查看新的内核版本
uname -r
删除旧的内核
yum remove kernel
可能遇到的问题:
1.提示Another app is currently holding the yum lock; waiting for it to exiting
错误:运行rm -f /var/run/yum.pid
命令直接删去进程。
2.提示警告:RPM 数据库已被非 yum 程序修改。
错误:无须在意,可能是包的依赖并不全部由yum完成。
安装Docker
卸载旧版本Docker
删除docker和下的所有配置文件、镜像容器等等。
yum -y remove docker*
sudo rm -rf /var/lib/docker
安装新的Docker
使用阿里云的镜像安装Docker。
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装最新版Docker。
sudo yum install doker-ce
启动Docker并把它加入到开机启动。
sudo systemctl start docker
sudo systemctl enable docker
重新加载设置 重启引擎
systemctl daemon-reload
systemctl restart docker
查看docker是否可用。
运行第一个镜像
通过运行 hello-world 映像来验证是否正确安装了 Docker Engine-Community 。
sudo docker run hello-world
结果为下面这样就表示安装成功。
Docker的基本操作
运行一个乌邦图镜像
docker run -it ubuntu bash
运行结果如下
-it 参数
,通过终端与进程(容器)交互,stdin,stdout,stderr
定向到 TTY
。具体到每个参数:
-t
参数:在新容器内指定一个伪终端或终端。-i
参数:允许你对容器内的标准输入 (STDIN) 进行交互。
注意第十行 root@cdf1866bd294:/#
,此时我们已进入一个 ubuntu15.10 系统的容器。
如果没有-it
参数,那么-i
默认为false
,-t
默认为false
,也就是说,不会保持输入流开放,也不会开启伪造终端。
显示本地的镜像库内容
docker images
获得帮助
docker --help
显示运行中的镜像
docker ps
显示所有容器(包括已终止的)
docker ps -a
继续运行原容器并进入
docker restart laughing_kare
docker ps
docker attach laughing_kare
注意后面的laughing_kare
是镜像的名字,看上一步“显示所有容器(包括已终止的)”结果,选择第二个容器镜像(ubuntu)。
拉取MySQL镜像
docker pull mysql:5.7
docker images
构建Docker镜像练习
使用MySQL容器
启动服务器并为容器命名。
sudo docker run -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
因为我之前以及运行过上面的命令,所以无需再次为容器命名。
启动客户端。
docker run -it --net host mysql:5.7 "sh"
mysql -h127.0.0.1 -P3306 -uroot -proot
查看数据库文件。
docker exec -it mysql2 bash
ls /var/lib/mysql
以下三条命令依次是,取出所有停止的容器;删除所有未使用的卷;列出所有的卷。
docker container prune -f
docker volume prune –f
docker volume ls
以下三条命令依次是,删去所有容器,只返回数字ID;创建卷(命名为mydb);启动mysql容器服务端,并为其设置名称。
docker rm $(docker ps -a -q) -f -v
docker volume create mydb
docker run --name mysql2 -e MYSQL_ROOT_PASSWORD=root -v mydb:/var/lib/mysql -d mysql:5.7
以下三条命令依次是,创建名称为myclient的mysql客户端容器,并且与mysql2容器关联(通过–link完成),同时为mysql2设置别名mysql;查看环境配置;从3306端口登录mysql2容器的数据库。
docker run --name myclient --link mysql2:mysql -it mysql:5.7 bash
env
mysql -hmysql -P3306 -uroot -proot
Docker Compose 与多容器应用自动化部署
使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具。
安装Docker Compose
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
查看是否安装成功
docker-compose -v
使用yaml文件进行自动化部署
首先需要编写yaml文件(stack.yml)。
之后执行该文件。
注意:
- *.yml文件内所有
:
和‘-’
符号的后面都必须有空格。 - image字段后的镜像必须在运行
pull
命令拉取到本地后后才能使用。
因为在docker pull adminer
时非常慢,所以尝试了更换镜像地址。
sudo vi /etc/systemd/system/multi-user.target.wants/docker.service
修改原ExecStart字段为ExecStart=/usr/bin/dockerd --registry-mirror=https://jxus37ac.mirror.aliyuncs.com
。
Docker网络
查看各种模式的网络。
运行一个ubuntu容器,并在运行完毕后就删去。
在ubuntu容器内安装网络相关的一些工具包。
查看网络配置
对主机地址进行ping。
创建自定义网络
容器监控与与日志
检查docker的状态
查看容器内进程
容器详细信息
容器日志查看
Docker图形化界面
docker run -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer