一、安装
1)安装依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2)设置阿里云镜像源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3)安装 Docker-CE
sudo yum install docker-ce
4)启动docker
# 开机自启
sudo systemctl enable docker
# 启动docker服务
sudo systemctl start docker
二、配置加速daemon.json,下载会很快
1)没有的话创建
[root@localhost ~]# cd /etc/docker/
[root@localhost docker]# touch daemon.json
2)添加内容
vi daemon.json
{
"registry-mirrors": ["https://mj9kvemk.mirror.aliyuncs.com"]
}
3)重启docker
[root@localhost docker]# service docker restart
三、下载基础镜像
镜像地址:(https://hub.docker.com/search?q=&type=image)
[root@localhost docker]# docker pull centos:centos7
四、查看基础镜像
-
4.1 查看所有镜像
[root@localhost docker]# docker images
- 4.2 # 根据imageID进入系统(端口映射注意开防火墙)
[root@localhost docker]# docker run --net=host --privileged=true -d -i -t 镜像id /bin/bash
执行命令后显示<ContainerID>,这个id是临时的很长,也可以通过docker ps查看
--net=host 表示与主机公用一个网络,host下使用p进行端口映射时不生效,--net=bridge默认,可以进行端口映射,目前我不会调网络
--privileged=true表示特权模式
使用--net=host进入有个毛病,你不知道你到底是在容器还是原系统,简直就是盗梦空间,解决办法就是输入docker,能执行就是外面,不能执行就是里面
多个端口映射
[root@localhost docker]# docker run --net=bridge --privileged=true -d -i -t -p 5001:22 -p 5080:8080 镜像id /bin/bash
centos防火墙:
开启防火墙端口:firewall-cmd --zone=public --add-port=5001/tcp --permanent
重新加载配置:firewall-cmd --reload
查看开放的端口:firewall-cmd --list-ports
关闭防火墙:systemctl stop firewalld
检查防火墙状态:systemctl status firewalld
- 4.3 # 根据<ContainerID>进入镜像系统
docker attach <ContainerID>
[root@localhost docker]# docker attach 4c2a84a7828590b95115b9556ca0f428b038f97500e6843c847d7ae84ed8f472
- 4.4 # 进入容器,安装常用工具
[root@ce0ad2c45c5e /]# yum install -y openssh-server vim lrzsz wget gcc-c++ pcre pcre-devel zlib zlib-devel ruby openssl openssl-devel patch bash-completion zlib.i686 libstdc++.i686 lsof unzip zip
- 4.5 # 进入容器,service安装
[root@localhost /]# yum install initscripts
- 4.6 # 进入容器,ifconfig安装
[root@localhost /]# yum install net-tools.x86_64
- 4.7 # 进入容器,ssh安装(10.0.75.1为docker的ip)
[root@localhost docker]# yum install openssh-server
[root@localhost docker]# yum -y install openssh-clients
安装完成后,启动sshd:
/usr/sbin/sshd -D
报错则:
[root@68e7598797d7 /]# ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''
[root@68e7598797d7 /]# ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
[root@68e7598797d7 /]# ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''
- 4.8 #修改sshd_config 为密码登录
vim /etc/ssh/sshd_config
#将 Port 22 前面的注释去掉(开启22号端口,如果--net=host可以修改端口号,我这里改成5001,然后物理系统上开通5001防火墙)
#打开注释 PermitRootLogin yes, 允许密码登录,保存退出
重新启动
/usr/sbin/sshd -D &
- 4.9 #设置root用户密码
passwd root
然后就可以进行ssh连接docker系统了
- 4.10 #重新制作镜像,把容器打包成镜像(ctrl+p+q退出容器,回到宿主机才能制作)
docker commit 容器id hy:myfCentos7
五、基础命令
#退出,但不停止容器
Ctrl+P+Q
#回到Docker宿主机下面,停止容器
docker stop <容器ID>
#提交当前容器到镜像
docker commit <容器ID> <NAME/VERSION>
#启动新容器,并且进行端口映射(本机50001端口 映射 容器的22端口)
docker run --privileged=true -itd -p 5001:22 -p 5080:8080 <刚才提交的镜像ID> /bin/bash
#查看运行中的容器
docker ps
#根据<ContainerID>进入镜像系统
docker attach <ContainerID>
#删除指定id的镜像
docker rmi <image id>
#删除所有
docker rmi -f $(docker images -q)
#导出镜像到本地
cd /usr/local/docker_demo
docker save > 随意名字小写字母.tar 源镜像ID
docker save > myfcentos720200613.tar e5db63462292
导入镜像(使用save 导出的镜像),需要使用load导入镜像,不要使用export
# 导出容器到本地
docker export -o 随意名字小写字母.tar 容器id
(linux下载文件:cd切换至目录后,执行 sudo sz 文件名)
# 导入镜像(使用export导出的镜像,使用import导入)到docker
cd /usr/local/docker_demo
[root@localhost docker_demo]# docker import myfcentos720200613.tar myfmyf
六、每次重启启动docker镜像,需要执行的命令
(写入dockerfile)
启动ssh
/usr/sbin/sshd -D &
刷新环境变量
source /etc/profile
执行一键启动脚本
./autoRun.sh
Dockerfile文件:
FROM cpscentos720200615:cps
# author
MAINTAINER myf
# execute autorun
WORKDIR /usr/local/cps
CMD ["/usr/sbin/sshd", "-D"]
CMD ["source", "/etc/profile"]
CMD ["sh", "autoRun.sh", "run"]
# set port
EXPOSE 5001
EXPOSE 7777
进行编译生成新的镜像
$ docker build -f Dockerfile -t cps_web:v1 .
七、镜像使用
# 进入到镜像目录
cd /home/ldadmin/dockerfile
# 导入镜像
docker import myfcentos720200615_V2.tar cpscentos720200615_v2:cps
# 放入dockerfile进行编译,重新编译
docker build -f DockerfileV2 -t cps_webtalk:v7 .
# 启动docker,auto_service.sh中写自启脚本
docker run --net=host -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro --restart=always --privileged=true -d -i -t 3b7d76985869 /usr/local/cps/auto_service.sh
--net=host 表示使用主机网络
--restart=always 开机自启这个镜像,如果要停止 ( docker rm -f 容器id )
--privileged=true 特权模式
-d 表示后台运行,在后台运行容器,并且打印容器id。
-i -t 即使没有连接,也要保持标准输入
/usr/local/cps/auto_service.sh 镜像启动之后需要运行的脚本
# 进入docker
docker attach 容器id
# 使用SSH连接
ip与主机相同,端口5001 账号root 密码123456
# 同步docker与宿主机时间
发现两者之间的时间相差了八个小时!
宿主机采用了CST时区,CST应该是指(China Shanghai Time,东八区时间)
容器采用了UTC时区,UTC应该是指(Coordinated Universal Time,标准时间)
修改步骤:
宿主机中
docker cp /usr/share/zoneinfo/Asia/Shanghai 容器ID或容器名:/usr/share/zoneinfo/Asia
进入容器中
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
查看时间
date
数据库在宿主机,docker连接宿主机的ip:172.17.0.1
(连接宿主机数据库参考链接:https://www.jianshu.com/p/3e1fd311ba87)
其他方案:可以通过hosts中添加name,通过hostname进行访问
# vi /etc/hosts