Docker自制镜像之私有云平台完整版
一、Docker安装
二、Docker操作
搜索中央仓库可用镜像
$ docker search centos
2.1【镜像操作命令】
2.1.1 查看所有镜像docker images删除所有镜像
$ docker rmi $(docker images -q)
2.1.2 删除没有使用的镜像
docker rmi -f $(docker images | grep "" | awk "{print \$3}")
2.2【容器操作命令】
2.2.1 查看所有容器(包括未运行)
$ docker ps -a
2.2.2 删除所有未运行容器(https://www.jb51.net/article/111073.htm)
$ docker rm $(docker ps -a -q)
2.2.3 删除停止的容器
$ docker rm $(docker ps --all -q -f status=exited)
2.2.4.1 创建容器(暂不推荐)
$ docker create --name=myapp [增加可选参数]
2.2.4.2 创建并启动容器(推荐,注:显示指定--network=host 代替默认的 bridge 模式可能性能更好,--privileged表示以超级权限启动,-d(detach)表示以后台启动,-v(volume)表示共享挂载宿主机与容器目录(宿主机目录:容器目录)可以写多个 如:-v /opt/apps:/opt/apps -v /mnt/disk1:/mnt/disk1表示分别挂载两个目录,重要:这里以/usr/sbin/init作为入口启动的好处是避免在centos7下默认sshd/systemctl/d-bus等服务不会自启动的问题)
$ docker run -tid -v /mnt/disk1:/mnt/disk1 --privileged --name=myapp --hostname=myapp1 --network=bridge myapp /usr/sbin/init [其他可选参数]
或增加端口映射的语法(宿主机代理端口:容器端口,注:仅在--network=bridge模式下有效):
$ docker run -tid -p 58081:8081 -v /opt/apps:/opt/apps --privileged --name=myapp --hostname=myapp1 --network=bridge myapp /usr/sbin/init
若想映射UDP端口则使用命令: -p 58081:8081/udp
2.2.5 修改容器配置(如果需要)
$ docker container update --restart always [container ID]
注:此方式仅支持一部分参数修改,如,不支持修改映射端口;
若想修改端口映射,可参考:动态修改docker映射端口
2.2.6 后台启动容器
$ docker start [containerID]
2.2.7 进入某个容器
$ docker exec -it [containerID] bash
2.2.8 查看容器日志
$ docker logs -f --tail 10 myapp
2.3【自制镜像的导入和导出】
2.3.1 保存容器
$ docker commit [containerID] myapp
2.3.2 导出镜像到本地文件
$ docker export [containerID] > myapp.img
2.3.3 导入本地镜像(:latest表示指定tag 可选)
$ docker import - myapp:latest < myapp.img
2.3.4 宿主机与容器文件拷贝
$ docker cp [OPTIONS] srcPath containerID:destPath
$ docker cp [OPTIONS] containerID:srcPath destPath
2.4【Docker CentOS7 安装SSH】
2.4.1 安装passwd,openssl,openssh-server
$ yum install passwd openssl openssh-server -y
启动sshd:
[root@myapp1 /]# /usr/sbin/sshd -D
这时报以下错误:
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
执行以下命令解决:
[root@myapp1 /]# ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''
[root@myapp1 /]# ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
[root@myapp1 /]# ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''
然后,修改 /etc/ssh/sshd_config 配置信息:
UsePAM yes 改为 UsePAM no
UsePrivilegeSeparation sandbox 改为 UsePrivilegeSeparation no
[root@myapp1 /]# sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config
[root@myapp1 /]# sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config
修改完后,重新启动sshd(注:此启动仅供测试sshd服务是否正常,重新创建容器时可显示指定启动参数,见1.2创建容器)
[root@myapp1 /]# /usr/sbin/sshd -D > /var/log/sshd.log