基本概念
容器container本质是一个运行在主机上的进程
- 查看运行的容器docker ps 默认只看运行中的
- 查看所有的容器docker ps -a
- 删除容器 docker rm 容器id[或容器名]
- 停止一个容器 docker stop 容器id
镜像image是容器的静态概念(可以看做容器的“安装包”)
- 查看安装的镜像docker images
- 删除镜像docker rmi 镜像名
仓库是存放镜像的地方,跟git一样的
镜像是打包好的运行环境,比如centos,做好这个镜像后上传到镜像库,别人就可以直接pull下来运行使用了。
安装过程记录
- 拉取镜像 docker pull centos
- 运行容器 docker run -it -p 8080:80 centos /bin/bash 该命令总是会创建一个新容器,如果要启动已经存在的容器,用docker start 容器id
- -i 交互模式
- -t 分配一个伪终端
- -p 主机端口:容器内的端口
- centos镜像名,公共受信任的镜像可以直接用镜像名,个人镜像一般是镜像库用户名/镜像名,镜像库和git库类似,如果要拉取进行的某个版本标签,可以镜像名:[Tag名]
- /bin/bash启动镜像后执行的命令,这里也就是启动后打开终端,然后可以使用centos的yum安装需要的包,systemctl start 启动需要的服务
- 但在systemctl start时报错:Failed to get D-Bus connection: Operation not permitted
- 这是因为D-Bus没有启动,启动选项加上 –privileged -d,并把命令从/bin/bash 修改为init
- init就是/usr/sbin/init, 里面会自动启动D-Bus
- –privileged 赋予容器更多的权限,以便正常启动D-Bus
- -d是进入后台运行,init并不是控制终端,执行完成后它会一直停在那个地方,无法进行命令交互,所以-d让他脱离命令行,进入后台运行
- 然后docker exec -it [容器id] /bin/bash 进入容器的终端,接着就可以进行使用centos的各项命令了
- 需要安装的内容
- PHP
- Apache
- MySQL
- openssh-server 方便通过ssh登录容器,主要是方便用sftp scp这些上传下载代码
- 目录共享,我们可以把docker容器中apache的工作目录挂载到主机上(运行docker的机器)的目录
- 增加ssh端口映射,如果run后发现需要增加端口, 比如增加ssh端口,可以这么做
- docker commit [容器id] [起一个名字],先把当前的容器另存为一个镜像
- 然后在用run启动这个镜像,并带上你添加的端口 docker run -it -p 2222:22 -p 8080:80 –privileged -d [commit时的镜像名字] init
- 但这里要注意,之前的端口映射也要加上 , 这里的做法只是在之前的容器上继续启动,之前镜像中安装的内容也还在,但run命令的参数和之前是一样的,增加内容而已
- vim /etc/ssh/sshd_config
- 添加PermitRootLogin yes
- 记得docker exec -it [容器id] /bin/bash后设置一个root密码
- 在上面主机和容器目录共享,在run时加上参数 -v [主机的目录]:[容器中的目录],比如 -v /workspace/ydeditor:/var/www/html