docker常用命令
docker pull alpine #下载镜像 docker push alpine #上传镜像 docker images #查看镜像 docker run -i -t ubuntu /bin/bash #从镜像文件生成容器 docker ps -a #查看容器 docker stop <containID> #停止容器 docker start <containID> #重新启动容器 docker rm -f <containID> #删除容器 docker exec -it 742 /bin/bash #进入容器内部 docker export 1cdae865d767 > ubuntu_py.tar #将容器导出为打包压缩文件 ls | grep *.tar #查看容器打包成的文件 docker import ubuntu_py.tar my_ubuntu:v5 #将文件导入为镜像 docker images #查看镜像 # docker run -it -v /test --name alpine_test alpine sh #-v参数生成volume # docker volume ls #查看volume DRIVER VOLUME NAME local a4588769d7f4a23745c632124fd308f23a7d241 local nexus-data local test # docker rm -f -v 19aea8644fe2 #删除匿名卷 # docker volume rm test #删除有名卷
Dockerfile的主要组成部分
FROM alpine:latest ---指定基础镜像的信息 RUN apt-get install golang-go ---定义镜像构建的步骤 CMD ["/bin/sh"] ---指定容器启动时命令
Dockerfile的常用指令
FROM ---指定基础镜像 MAINTAINER ---指定维护者信息,可以没有 RUN ---容器内执行shell命令 ADD ---COPY文件,会自动解压 COPY ---COPY文件 WORKDIR ---设置当前工作目录 VOLUME ---设置卷,挂载主机目录 EXPOSE ---指定对外的端口 CMD ---指定容器启动后的要执行的命令 ENV ---定义环境变量 ENTRYPOINT ---容器启动后执行的命令
Dockerfile的CMD和ENTRYPOINT的区别
当只有CMD的时候,即执行CMD的命令;如果启动容器的时候加了命令,则会替代CMD的命令。
当只有ENTRYPOINT的时候,可以执行ENTRYPOINT的命令,如果启动容器的时候加了参数(在命令的位置),则启动的参数会作为ENTRYPOINT的参数。
当ENTRYPOINT和CMD都存在的时候,CMD的内容会作为ENTRYPOINT的参数,如果启动容器的时候加了参数X,则X会替代CMD的内容作为ENTRYPOINT的参数。
举个例子
给alpine镜像安装ssh软件并且实现ssh远程连接。
当前路径下的文件
location:/home/phyger/dockerfile
dockerfile内容:
FROM alpine:latest MAINTAINER phyger 复制时区文件 COPY Shanghai /etc/localtime 更新镜像源,安装openssh,生成秘钥,修改root用户密码 RUN echo "http://mirrors.ustc.edu.cn/alpine/v3.5/main" > /etc/apk/repositories && \ echo "http://mirrors.ustc.edu.cn/alpine/v3.5/community" >> /etc/apk/repositories && \ apk --update add --no-cache && \ apk add --no-cache openssh && \ sed -i "s/#PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config && \ ssh-keygen -t rsa -P "" -f /etc/ssh/ssh_host_rsa_key && \ ssh-keygen -t ecdsa -P "" -f /etc/ssh/ssh_host_ecdsa_key && \ ssh-keygen -t dsa -P "" -f /etc/ssh/ssh_host_dsa_key && \ ssh-keygen -t ed25519 -P "" -f /etc/ssh/ssh_host_ed25519_key && \ echo "root:admin" | chpasswd 暴露22端口 EXPOSE 22 命令参数 CMD ["-D"] 指定容器启动的命令 ENTRYPOINT ["/usr/sbin/sshd"]
构建镜像:
目录常用命令
pwd #显示工作路径 ll #显示目录详细内容 cat file1 #从第一个字节开始正向查看文件的内容 tree #显示文件和目录由根目录开始的树形结构(1) lstree #显示文件和目录由根目录开始的树形结构(2) cd /home #进入 '/ home' 目录' cd .. #返回上一级目录 cd ../.. #返回上两级目录 cd #进入个人的主目录 cd ~user1 #进入个人的主目录 cd - #返回上次所在的目录 ls #查看目录中的文件 ls -F #查看目录中的文件 ls -l #显示文件和目录的详细资料 ls -a #显示隐藏文件 ls *[0-9]* #显示包含数字的文件名和目录名
删建复制
mkdir dir1 #创建一个叫做 'dir1' 的目录' mkdir dir1 dir2 #同时创建两个目录 mkdir -p /tmp/dir1/dir2 #创建一个目录树 rm -f file1 #删除一个叫做 'file1' 的文件' rmdir dir1 #删除一个叫做 'dir1' 的目录' rm -rf dir1 #删除一个叫做 'dir1' 的目录并同时删除其内容 rm -rf dir1 dir2 #同时删除两个目录及它们的内容 mv dir1 new_dir #重命名/移动 一个目录 cp file1 file2 #复制一个文件 cp dir/* . #复制一个目录下的所有文件到当前工作目录 cp -a /tmp/dir1 . #复制一个目录到当前工作目录 cp -a dir1 dir2 #复制一个目录
link、touch、find
touch -t 0712250000 file1 #修改一个文件或目录的时间戳 - (YYMMDDhhmm) file file1 outputs the mime type of the file as text iconv -l #列出已知的编码 iconv -f fromEncoding -t toEncoding inputFile > outputFile creates a new from the given input file by assuming it is encoded in fromEncoding and converting it to toEncoding. find . -maxdepth 1 -name *.jpg -print -exec convert "{}" -resize 80x60 "thumbs/{}" \; batch resize files in the current directory and send them to a thumbnails directory (requires convert from Imagemagick)e
用户和群组
groupadd group_name #创建一个新用户组 groupdel group_name #删除一个用户组 groupmod -n new_group_name old_group_name #重命名一个用户组 useradd -c "Name Surname " -g admin -d /home/user1 -s /bin/bash user1 #创建一个属于 "admin" 用户组的用户 useradd user1 #创建一个新用户 userdel -r user1 #删除一个用户 ( '-r' 排除主目录) usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1 #修改用户属性 passwd #修改口令 passwd user1 #修改一个用户的口令 (只允许root执行) chage -E 2005-12-31 user1 #设置用户口令的失效期限 pwck #检查 '/etc/passwd' 的文件格式和语法修正以及存在的用户 grpck #检查 '/etc/passwd' 的文件格式和语法修正以及存在的群组 newgrp group_name #登陆进一个新的群组以改变新创建文件的预设群组
文件权限
使用 "+" 设置权限,使用 "-" 用于取消 ls -lh #显示权限 ls /tmp | pr -T5 -W$COLUMNS #将终端划分成5栏显示 chmod ugo+rwx directory1 #设置目录的所有人(u)、群组(g)以及其他人(o)以读(r )、写(w)和执行(x)的权限 chmod go-rwx directory1 #删除群组(g)与其他人(o)对目录的读写执行权限 chown user1 file1 #改变一个文件的所有人属性 chown -R user1 directory1 #改变一个目录的所有人属性并同时改变改目录下所有文件的属性 chgrp group1 file1 #改变文件的群组 chown user1:group1 file1 #改变一个文件的所有人和群组属性 find / -perm -u+s #罗列一个系统中所有使用了SUID控制的文件 chmod u+s /bin/file1 #设置一个二进制文件的 SUID 位 - 运行该文件的用户也被赋予和所有者同样的权限 chmod u-s /bin/file1 #禁用一个二进制文件的 SUID位 chmod g+s /home/public #设置一个目录的SGID 位 - 类似SUID ,不过这是针对目录的 chmod g-s /home/public #禁用一个目录的 SGID 位 chmod o+t /home/public #设置一个文件的 STIKY 位 - 只允许合法所有人删除文件 chmod o-t /home/public #禁用一个目录的 STIKY 位
打包压缩和解压文件
bunzip2 file1.bz2 #解压一个叫做 'file1.bz2'的文件 bzip2 file1 #压缩一个叫做 'file1' 的文件 gunzip file1.gz #解压一个叫做 'file1.gz'的文件 gzip file1 #压缩一个叫做 'file1'的文件 gzip -9 file1 #最大程度压缩 rar a file1.rar test_file #创建一个叫做 'file1.rar' 的包 rar a file1.rar file1 file2 dir1 #同时压缩 'file1', 'file2' 以及目录 'dir1' rar x file1.rar #解压rar包 unrar x file1.rar #解压rar包 tar -cvf archive.tar file1 #创建一个非压缩的 tarball tar -cvf archive.tar file1 file2 dir1 #创建一个包含了 'file1', 'file2' 以及 'dir1'的档案文件 tar -tf archive.tar #显示一个包中的内容 tar -xvf archive.tar #释放一个包 tar -xvf archive.tar -C /tmp #将压缩包释放到 /tmp目录下 tar -cvfj archive.tar.bz2 dir1 #创建一个bzip2格式的压缩包 tar -jxvf archive.tar.bz2 #解压一个bzip2格式的压缩包 tar -cvfz archive.tar.gz dir1 #创建一个gzip格式的压缩包 tar -zxvf archive.tar.gz #解压一个gzip格式的压缩包 zip file1.zip file1 #创建一个zip格式的压缩包 zip -r file1.zip file1 file2 dir1 #将几个文件和目录同时压缩成一个zip格式的压缩包 unzip file1.zip #解压一个zip格式压缩包
网络
hostname #查看机器名 host www.example.com #把一个主机名解析到一个网际地址或把一个网际地址解析到一个主机名。 nslookup www.example.com #用于查询DNS的记录,查看域名解析是否正常,在网络故障的时候用来诊断网络问题。 ifconfig eth0 #显示一个以太网卡的配置 ifup eth0 #启用一个 'eth0' 网络设备 ifdown eth0 #禁用一个 'eth0' 网络设备 ifconfig eth0 192.168.1.1 netmask 255.255.255.0 #控制IP地址 ifconfig eth0 promisc #设置 'eth0' 成混杂模式以嗅探数据包 (sniffing) dhclient eth0 #以dhcp模式启用 'eth0' route -n #查看路由表 route add -net 0/0 gw IP_Gateway #配置默认网关 route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 #配置静态路由到达网络'192.168.0.0/16' route del 0/0 gw IP_gateway #删除静态路由 ip link show #查看网卡信息 mii-tool #用于查看、管理介质的网络接口的状态 ethtool #用于查询和设置网卡配置 netstat -tupl #用于显示TCP/UDP的状态信息 tcpdump tcp port 80 #显示所有http协议的流量
挂载文件系统
mount /dev/hda2 /mnt/hda2 #挂载一个叫做hda2的盘 - 确定目录 '/ mnt/hda2' 已经存在 umount /dev/hda2 #卸载一个叫做hda2的盘 - 先从挂载点 '/ mnt/hda2' 退出 fuser -km /mnt/hda2 #当设备繁忙时强制卸载 umount -n /mnt/hda2 #运行卸载操作而不写入 /etc/mtab 文件- 当文件为只读或当磁盘写满时非常有用 mount /dev/fd0 /mnt/floppy #挂载一个软盘 mount /dev/cdrom /mnt/cdrom #挂载一个cdrom或dvdrom mount /dev/hdc /mnt/cdrecorder #挂载一个cdrw或dvdrom mount /dev/hdb /mnt/cdrecorder #挂载一个cdrw或dvdrom mount -o loop file.iso /mnt/cdrom #挂载一个文件或ISO镜像文件 mount -t vfat /dev/hda5 /mnt/hda5 #挂载一个Windows FAT32文件系统 mount /dev/sda1 /mnt/usbdisk #挂载一个usb 捷盘或闪存设备 mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share #挂载一个windows网络共享
APT安装软件(debian、ubuntu)
apt-get install package_name #安装/更新一个 deb 包 apt-cdrom install package_name #从光盘安装/更新一个 deb 包 apt-get update #升级列表中的软件包 apt-get upgrade #升级所有已安装的软件 apt-get remove package_name #从系统删除一个deb包 apt-get check #确认依赖的软件仓库正确 apt-get clean #从下载的软件包中清理缓存 apt-cache search searched-package #返回包含所要搜索字符串的软件包名称
DEB包安装软件(debian、ubuntu)
dpkg -i package.deb #安装/更新一个 deb 包 dpkg -r package_name #从系统删除一个 deb 包 dpkg -l #显示系统中所有已经安装的 deb 包 dpkg -l | grep httpd #显示所有名称中包含 "httpd" 字样的deb包 dpkg -s package_name #获得已经安装在系统中一个特殊包的信息 dpkg -L package_name #显示系统中已经安装的一个deb包所提供的文件列表 dpkg --contents package.deb #显示尚未安装的一个包所提供的文件列表 dpkg -S /bin/ping #确认所给的文件由哪个deb包提供
参考链接
https://mp.weixin.qq.com/s?__biz=MzU1NjQ3ODAwNg==&mid=100002637&idx=1&sn=148d3c88a7a7b9e122aa079d644652c5&chksm=7bc530144cb2b902b9a289589e6f75cea4dc8ab99c34aba3550cf20028201ef3196416c8abf0&mpshare=1&scene=1&srcid=1218nxJDB4BMRE7txf6RDuHu&sharer_sharetime=1639759282668&sharer_shareid=f4bfa0cbde36c8390fab8d992e80e613&key=32f8b67b0da47795d58430b85970ffa6b1064dff5142a5c06d7e765ec009d40b58b1e077f2ee82bd3ccffe71d03db867bba02363ccdc4030cb9aca8e6f3d4974c63ec67caef8c75645d310ce44d22e50e14cd468ecc5dd99ed166cdf5cab6ee80d743e1df975f53068dbdf8e23ca343c91020494827f97fc50ff5097d346e6f9&ascene=1&uin=NzEyMzE1ODIw&devicetype=Windows+10+x64&version=62090538&lang=zh_CN&exportkey=A3v%2FmnHcbdedzkP8e50mD%2Bs%3D&pass_ticket=RZLY40ayNnHL%2BleX0PVacbKqdXQJ42srn9Ea3a9chWiILW2DH4bIr%2FMovsIDsztb&wx_header=0
https://mp.weixin.qq.com/mp/homepage?__biz=MzU1NjQ3ODAwNg==&hid=8&sn=c6345788844e724de3dbcdbc78fafe5d&scene=1&devicetype=Windows+10+x64&version=62090538&lang=zh_CN&nettype=WIFI&ascene=1&session_us=gh_8f86fc2ac31a&pass_ticket=RZLY40ayNnHL%2BleX0PVacbKqdXQJ42srn9Ea3a9chWiILW2DH4bIr%2FMovsIDsztb&wx_header=1&from=singlemessage&uin=NzEyMzE1ODIw&key=32f8b67b0da477950cf8cf6ad5a51260937b024efa84a972b34c59828f752a1bee3e363994301d2c72024279ce0c2c7e5815f8fada2ddaf6e2f775d65c6b619ac8f9cef977d95cdfd9c51a8de4deaf0dd03dd30354130cca52567b451b894d41483ab260887e876d7cf1aa535ea7d0c5ccc3bb258654bfdcf9aee50315db9a48