【Docker基础】02-安装并启动一个Docker容器
1.安装Docker
国内直接访问Docker官网速度较慢,不过国内各大厂商都提供加速服务,我们到华为云镜像站加速。
1.1 Centos安装Docker
- 安装过docker,需要先删掉,之后再安装依赖:
1 | sudo yum remove docker docker-common docker-selinux docker-engine |
- 下载docker repo文件,并更换软件仓库地址为华为云地址
1 | wget -O /etc/yum.repos.d/docker-ce.repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo |
- 更新yum源索引,并安装docker, CE为社区版本
1 | sudo yum makecache fast |
- 启动Docker。
1 | sudo systemctl enable docker #设置Docker服务宿主机重启后自动启动 |
- 检查一下docker安装结果
1 | sudo docker info |
1.2 配置Docker加速
华为云提供免费SWR仓库,可登陆后,拷贝加速地址(https://e2660ea6dc2b4a16a3ae382f8d227beb.mirror.swr.myhuaweicloud.com)。
在宿主机的/etc/docker
目录下添加配置文件daemon.json
1 | mkdir -p /etc/docker |
重启服务生效:
1 | sudo systemctl daemon-reload |
当然,如果是在内网环境,使用的是自建私有仓库,可能使用的HTTP协议的仓库your-private-repo.com
,则修改对应配置为:
1 | mkdir -p /etc/docker |
1.3 获取镜像
安装完成后可拉取对应镜像,如果不指定仓库地址,则动docker-hub下载,或者指定地址下载镜像。
1 | docker pull nginx:alpine-perl #拉取镜像 |
2.启动一个ubuntu容器
直接启动容器一般有两个途径:
新建一个容器后启动
docker run
。已有一个容器实例执行该容器
docker exec
。
新建启动一个容器
在获取到镜像以后,使用docker run
基于镜像新建启动一个容器,拉取一个ubuntu镜像做下实验.
1 | sudo docker pull ubuntu:latest #拉取ubuntu镜像 |
可以看到命令行已经切入到ubuntu这个容器中了,容器与host主机是共内核的,上层文件系统是独立的,通过Cgroup
与Namespace
来隔离容器之间的进程与资源。
参数说明:
-i
: 就是–interactive
的缩写,表示以交互模式运行容器,通常与-t
同时使用;-t
: 也可以使用–tty
来进行引用,为容器重新分配一个伪输入终端,通常与-i
同时使用;-v
: 指定主机的目录到容器目录下,实现主机与容器目录共享,-v /test:/tmp
表示将主机上的/test
目录挂到容器的/tmp
下;
有几个特别注意事项:
- 所有镜像的格式一定是**[REPOSITORY]:[tag]**。
- 当
docker run
命令不加任何启动命令的时候,默认执行容器的ENTRYPOINT或CMD指令所指定的命令,该命令是在镜像制作的时候指定的,以建议在制作镜像的时候,为服务性镜像提供默认的启动命令。上面的docker run
没有添加启动命令是因为在ubuntu中已经默认以bash
命令启动了。- 正常启动应以命令启动如,
docker run -it ubuntu:latest /bin/bash
执行一个已有容器
如果已有一些容器在运行,希望更改该容器或从中获取某些内容,那么使用docker exec
直接进入,其格式为docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
。如:
1 | sudo docker exec -it ubuntu_bash bash #ubuntu_bash为docker name也可以是docker ID |
其中的**[OPTIONS]**包括常见的:
-it
: 分配一个终端交互-w
: 如,-w /tmp
说明要在哪个工作目录中运行命令
其中的CONTAINER 可以是docker name也可以是docker ID,COMMAND就是容器中命令如上面示例中的bash
。
3.启动一个tomcat容器
3.1 拉取tomcat镜像
可使用login命令指定镜像仓库地址,输入账号登陆。
1 | sudo docker login -u my-private-repo.com:80 #输入密码可登陆私有镜像仓地址 |
打tag
就像给文件重新命名一样,所有docker镜像必须要有tag
说明,tag
一般为版本号。
3.2 运行tomcat容器
1 | docker run -d -p 8080:8080 --name tomcat01 mytomcat:1.0 |
参数说明:
-d
: daemon - 以守护进程在后台运行-p
: port - 前者是外部访问端口,后者是容器内映射端口--name
: tomcat01是容器名称,也可以不用指定名字- 最后一个参数是引用的具体镜像
3.3 进入已经运行的容器
1 | [root@kweekshcgp-m19vr ~]# docker ps -a |grep tomcat |
执行docker exec -it containerID /bin/bash
即可进入容器中,其中:
-i
: 表示以交互模式运行容器,通常与 -t 同时使用;-t
: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
但在浏览器输入Host IP:8080
后发现无法tomcat故障,到容器中查看tomcat目录结构如下:
1 | root@f1cf7db136a9:/usr/local/tomcat# ls -al |
其中,webapps
目录为空,需要将文件从webapps.dist
中拷贝至webapps
目录。再次访问时便可成功。
也可以在主机上查看tomcat所占资源情况。
1 | [root@kweekshcgp-m19vr ~]# docker stats |
如果想限制该容器的资源,怎么办?
1 | [root@kweekshcgp-m19vr ~]# docker run -d -p 8081:8080 --name tomcat02 -m 100M mytomcat:1.0 |
这是重新拉起一个tomcat02的容器,通过参数-m 100M
来限制内存大小
3.4 打包成新镜像
可以将允许修改了配置的容器重新打包,并上传到仓库,在其他机器上无需再做配置,直接拉取即可随时运行。
1 | sudo docker commit -a="author" -m="comments" 容器ID imagename:tag |
-a
: 作者信息-m
: 备注信息容器ID
: 将需要打包的容器IDimagename:tag
: 镜像命名与打tag标签
1 | [root@kweekshcgp-m19vr ~]# docker commit -a="meixuhong" -m="add webapps app" f1cf7db136a9 mytomcat:2.0 |
3.5 导出导入镜像
内网无法跟互联网互通,如果在内网无法获取到想要的镜像,可现在互联网将镜像导出并下载至本地,再将其导入到内网环境。
外网导出镜像:
1 | $ docker save mytomcat:v.10 -o mytomcat.tar |
内网导入镜像:
1 | $docker load < mytomcat.tar |
3.6 重启、退出与删除容器
退出容器直接使用exit
即可从交互命令中退出,删除容器前需要先停止,使用stop
或者rm
1 | root@f1cf7db136a9:/usr/local/tomcat#exit #退出容器 |
文章首发公众号:梅旭红,欢迎关注,不定期更新。
全文完。
