Mac安装Docker及使用
腾讯云上买的CVM过期了,再买还要花钱,还是用Docker吧。一年多没碰Docker了,好多操作忘记了,正好趁着这个机会记录一下。本次梳理在Mac下安装Docker,并使用Docker。
关系
Docker中有几个重要概念:
Image:镜像,对应操作系统的ISO,这是一个静态的概念
Container:通过镜像可以创建容器,对应安装好的操作系统,这是一个动态的概念。我们随时可以登录容器,即登录这个操作系统
安装Docker
Mac安装Docker很方便,从
https://docs.docker.com/desktop/mac/install/ 下载软件,安装即可。记得查看一下电脑是Intel芯片还是苹果芯片。
执行命令查看安装情况:
~ docker version
Client:
Cloud integration: v1.0.23
Version: 20.10.14
API version: 1.41
Go version: go1.16.15
Git commit: a224086
Built: Thu Mar 24 01:49:20 2022
OS/Arch: darwin/amd64
Context: default
Experimental: true
下载镜像
可以去https://hub.docker.com/ 选择自己需要的镜像。三年前做的镜像还在,就用这个吧。
下载镜像:
~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
shidawuhen/php-56-centos7 latest 92ed8b3a7cb4 3 years ago 617MB
当然,我们也可以在hub中找到自己想要的镜像,使用命令下载,如:
docker pull centos:centos7
容器操作
创建容器
有了镜像后,便可创建容器,命令如下:
# centos容器
docker run -itd \
-p 8080:8080 \
-p 8081:8081 \
-p 8082:8082 \
--privileged=true \
--name centos7 \
centos:centos7 \
/bin/bash
# mysql容器,可设置mysql密码
docker run -p 8083:8083 --name mysql8 -e MYSQL_ROOT_PASSWORD=1234Abcd -d mysql:8.0
- p:表示宿主机和容器机器的端口映射
- name:表示给该容器起的名称
- centos:centos7:表示使用哪个镜像的哪个版本
查看容器
使用docker ps命令可查看在运行的容器列表,用docker ps -a可以查看所有容器列表
~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fe13b347d938 centos:centos7 "/bin/bash" 4 seconds ago Up 4 seconds 0.0.0.0:8080-8082->8080-8082/tcp centos7
进入容器
可以使用docker exec命令进入容器,it后面是容器名称,/bin/bash表示在容器里使用bash命令:
docker exec -it centos7 /bin/bash
docker exec -it mysql8 /bin/bash
初次进入Centos7,可以修改root密码
[root@fe13b347d938 /]# passwd
创建user用户
[root@fe13b347d938 /]# useradd user
[root@fe13b347d938 /]# passwd user
添加sudoer
yum install sudo
visudo
# 文件末尾添加 user ALL=(ALL) ALL
关闭容器
可以使用命令关闭容器,也可直接使用图形界面进行操作
docker stop centos7
启动容器
容器关闭后,需要启动,才能再次进入
docker start centos7
重启容器
容器可进行重启
docker restart centos7
Docker File
上面的这些操作都是手工操作,管理单个容器足够使用了,但是如果需要管理多个镜像、容器,可以使用Docker File和Docker Compose。
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
举个简单实例讲述如何使用。
创建Docker File
创建两个Dockerfile,放到t1和t2目录下,内容为:
FROM centos:centos7
RUN echo 't1' > /home/1.txt
CMD ["/bin/bash"]
FROM centos:centos7
RUN echo 't2' > /home/1.txt
CMD ["/bin/bash"]
创建Compose
创建对应的docker-compose.yml,文件内容为:
version: '2.4'
services:
centos-t1:
container_name: centos-t1
privileged: true
build: ./t1
tty: true
ports:
- "5000:5000"
centos-t2:
container_name: centos-t2
privileged: true
build: ./t2
tty: true
ports:
- "5001:5001"
构建镜像
docker-compose -f docker-compose.yml up -d
执行完毕后,能够看到有两个新的镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
macdocker_centos-t2 latest 0e1d76e166fc 5 seconds ago 204MB
macdocker_centos-t1 latest 85bd53e29399 35 seconds ago 204MB
也能看到多了两个container
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
905c975e225d macdocker_centos-t2 "/bin/bash" 14 seconds ago Up 13 seconds 0.0.0.0:5001->5001/tcp centos-t2
b5be8096b5e6 macdocker_centos-t1 "/bin/bash" 14 seconds ago Up 13 seconds 0.0.0.0:5000->5000/tcp centos-t1
开启/关闭/重启
我们可以使用如下命令,对Compose的容器进行启动、关闭、重启
docker-compose -f docker-compose.yml start
docker-compose -f docker-compose.yml stop
docker-compose -f docker-compose.yml restart
Compose是对yml文件中的所有容器进行统一管理的,在UI界面中也能看出这种区别
总结
Docker极大的方便了运维同学,对于研发同学也有很大的助力。自己可以方便的搭建出符合自己要求的操作系统,将其上传为镜像,今后在各个位置可以复用,无需做重复的操作。
最初打算用自己的镜像,后来发现有D-Bus问题无法解决,最终使用docker pull mysql:8.0,获取已经有的镜像。大家如果有需求,可以先到GitHub上寻找一些官方的镜像,能节省不少时间。
资料
- MacOS Docker 安装
- docker容器的安装
- 解决:Failed to get D-Bus connection: Operation not permitted
- system
- Docker run 命令
- Docker Dockerfile
最后
大家如果喜欢我的文章,可以关注我的公众号(程序员麻辣烫)
我的个人博客为:
https://shidawuhen.github.io/
往期文章回顾:
- 设计模式
- 招聘
- 思考
- 存储
- 算法系列
- 读书笔记
- 小工具
- 架构
- 网络
- Go语言