docker docker-compose 安装及使用 持续更新
前言
docker安装与使用
什么是docker
docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 linux或windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
docker与虚拟机之间的区别
虚拟机:虚拟机是通过hypervisor(虚拟机管理系统,常见的有vmware workstation、virtualbox),虚拟出网卡、cpu、内存等虚拟硬件,再在其上建立虚拟机,每个虚拟机是个独立的操作系统,拥有自己的系统内核。
容器:容器是利用namespace将文件系统、进程、网络、设备等资源进行隔离,利用cgroup对权限、cpu资源进行限制,最终让容器之间互不影响,容器无法影响宿主机。
docker 安装
docker在线安装请参考官方文档
https://docs.docker.com/desktop/install/linux-install/
docker及docker-compose离线安装
安装版本: docker 20.10.14, docker-compose v2.24.7
安装环境: centos-7.9.2009
下载好docker及docker-compose相应版本,放到centos系统目录/opt/dockerinstall,目录如下:
[root@1b51ea5627f0 docker]# pwd
/opt/docker
[root@1b51ea5627f0 docker]# ll
total 122808
-rwxr-xr-x 1 root root 64273875 3月 5 18:23 docker-20.10.14.tgz
-rwxr-xr-x 1 root root 61466114 3月 9 00:02 docker-compose-linux-x86_64
添加服务文件docker.service
touch docker.service
写入以下内容
[unit]
description=docker application container engine
documentation=https://docs.docker.com
after=network-online.target firewalld.service
wants=network-online.target
[service]
type=notify
execstart=/usr/bin/dockerd
execreload=/bin/kill -s hup $mainpid
limitnofile=65535
limitnproc=65535
timeoutstartsec=0
delegate=yes
killmode=process
restart=on-failure
startlimitburst=3
startlimitinterval=60s
[install]
wantedby=multi-user.target
编写安装脚本install.sh,内容如下
#!/bin/sh
echo '解压tar包...'
tar -zxvf $1
echo '将docker目录移到/usr/bin目录下...'
cp docker/* /usr/bin/
echo '将docker.service 移到/etc/systemd/system/ 目录...'
cp docker.service /etc/systemd/system/
echo '添加文件权限...'
chmod +x /etc/systemd/system/docker.service
echo '重新加载配置文件...'
systemctl daemon-reload
echo '启动docker...'
systemctl start docker
echo '设置开机自启...'
systemctl enable docker.service
echo 'docker安装成功...'
docker -v
rm -rf docker
echo '删除docker解压文件成功...'
cp docker-compose-`uname -s|awk '{print tolower($0)}'`-`uname -m` /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -v
echo 'docker-compose 安装成功...'
给install.sh添加执行权限
chmod +x install.sh
至此 /opt/docker目录内容如下
[root@1b51ea5627f0 docker]# pwd
/opt/docker
[root@1b51ea5627f0 docker]# ll
total 122808
-rwxr-xr-x 1 root root 64273875 3月 5 18:23 docker-20.10.14.tgz
-rwxr-xr-x 1 root root 61466114 3月 9 00:02 docker-compose-linux-x86_64
-rwxr-xr-x 1 root root 437 4月 1 17:39 docker.service
-rwxr-xr-x 1 root root 743 4月 2 10:24 install.sh
执行install.sh一键安装docker及docker-compose
sh install.sh docker-20.10.14.tgz
安装验证
[root@d5ddd9635623 docker]# docker -v
docker version 20.10.14, build a224086
[root@d5ddd9635623 docker]# docker-compose -v
docker compose version v2.24.7
docker使用
常用命令
#指令 说明
docker images #查看已下载的镜像
docker rmi 镜像名称:标签名 #删除已下载的镜像
docker search 镜像 #从官方仓库(hub.docker.com)查找镜像
docker pull 镜像名称:标签名 #标签名默认是 latest,代表最新版本。
docker run #创建容器
docker ps #列出运行中的容器(运行中)
docker ps -a #列出所有的容器(运行、未运行)
docker rm 容器名称/id #删除停止的容器
docker rm -f 容器名称/id #删除运行中的容器
docker start 容器名称/id #启动容器
docker stop 容器名称/id #停止容器
docker restart 容器名称/id #重启容器
docker exec [-it] 容器名称/id 命令 #执行容器中的指令 eg:docker exec -it nginx /bin/bash
docker logs -f [--tail number] 容器名称/id #查看容器日志 eg:docker logs -f --tail 50 nginx
docker save -o 镜像文件名字.tar 镜像名字:版本 [其他镜像名字:版本...] #导出镜像到文件 在不能联网的环境有奇效
docker load -i 镜像文件名字.tar #从存档文件中读取镜像
docker run 常用参数
docker run --name 容器名称 -d -p 主机端口:容器内端口 -e 环境变量 -v localpath:dockerpath --link 其它容器名:容器中别名 镜像名称:标签名
-d: 后台运行容器,并返回容器id;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="xxxx": 为容器指定一个名称;
-e username="xxxx": 设置环境变量;
-m :设置容器使用内存最大值;
--link=[]: 添加链接到另一个容器;当要访问其它容器中的内容时,需要先链接才可以使用
-p: 开放一个端口或一组端口
-v: 映射容器的卷
--privileged=true: 为该容器提供扩展权限
基本命令使用
启动容器: 启动oracle 12c 企业版,容器名为 orcl12c
docker run --name orcl12c --privileged=true -p 1521:1521 -e oracle_sid="orcl" -e oracle_pdb="test" -e oracle_pwd="test@main" -e oracle_edition="standard" -e oracle_characterset="zhs16gbk" -v d:\dockervolumes\oracle12c\data:/opt/oracle/oradata -v d:\dockervolumes\oracle12c\opt:/data -d registry.cn-hangzhou.aliyuncs.com/snake-group/oracle-e:12c
查看日志
docker logs -f --tail 50 orcl12c
进入容器交互模式,类似ssh到 linux 服务器
docker exec -it orcl12c /bin/bash
发表评论