Docker笔记安装&操作&ssh&自启动&开机自动执行自定义脚本

一、安装 

    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

猜你喜欢

转载自blog.csdn.net/myfmyfmyfmyf/article/details/106728214