1.利用tar文件docker镜像的导出、导入
把镜像my_ubuntu_cpp:v1导出为文件my_ubuntu_cpp:v1
sudo docker save -o my_ubuntu_cpp_v1.tar my_ubuntu_cpp:v1
导入:docker import centos7.3.tar centos7.3:v1.0 (会丢失快照文件) 或docker load < centos7.3.tar
2.从镜像ubuntu-vs启动容器并映射docker容器的端口30到外部
ubuntu-test为容器名;
sudo docker run -i -t -p 30:22 -v /test:/soft --name ubuntu-test ubuntu-vs /bin/bash
如果不进入容器, 加-d;
如果用本机的端口,则用--net=host,注意需要修改vi /etc/ssh/sshd_config,Port 22 改为其他的,不能与主机22冲突
如果退出容器后,删除容器,加--rm;
如果映射文件,加-v, 把本地/test映射到/soft;
时间戳 current=`date "+%Y-%m-%d %H:%M:%S"`
sudo docker run -i -t -d --rm -p 30:22 --name centos7.3_build centos7.3:v2.0 /bin/bash /home/share/start_sh/run.sh
注意:-v之类的符号要在镜像名称之前,否则报错。自测的-t 不能与C++可执行文件一起使用;
2.启动编译镜像
sudo docker run -it -d --rm -p 30:22 build_centos7.3:v2.1 /bin/bash /home/share/start_sh/run.sh
run.sh:/usr/sbin/sshd -D
如果不好使,则坚持ssh是否启动,centos docker内部需设置:
$ ps -e | grep sshd
$修改配置 $vi /etc/ssh/sshd_config 中修改:PermitRootLogin yes
$启动SSH: service sshd start
$设置开机运行: chkconfig sshd on
2.bin/bash 后参数
这两种都可以:
/bin/bash /home/share/start_sh/run.sh 0.5
/bin/bash -c '/home/share/start_sh/run.sh 0.5'
/bin/bash -c 'cd /home/share/start_sh && ./run.sh 0.5'
shell 中取参数
1.$0-9:表示第0个到第9个参数,其中$0表示文件执行路径。如:$0,$1。
2.${10以后}:如果参数数目大于9个,可以用${10},${11}。。。等方式表示。不过参数太多可以换一个设计,如文件存储。
3.$*:表示所有的参数,当$*被放入""时,即("$*"),此时整个"$*"被看做是整个字符串,$*中单个参数不能被一个一个单独取出来。只有当$*不在""(当然也不可能是'')中时可以独立取出单个参数。取参数一般用于循环中,如for x in $*,遍历整个参数列表。
4.$@:表示所有的参数,但与$*不同的是,不管$@有没被放入""中,都可以一个一个取出$@中单独的参数。详见:http://blog.youkuaiyun.com/zhejiang9/article/details/7887569
5.$#:取传递进来的参数个数。
6.$$:取脚本运行的当前进程id。
7.$!:最后一次运行脚本的进程id。
str=$name": "$url #用:分隔
显示 echo $str1 或echo{"str1:", $str1}
2.定义一个计数器
index=1
echo "listing args with \$*:" #在屏幕输入,在$*中遍历参数
for arg in $*
do
echo "arg: $index = $arg"
let index+=1
done
3.关系判断
-eq 等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
-ne 不等于
value1=$1
value2=$2
if [[ value1 -gt value2 ]]
then
echo "The value1 > value2."
elif [[ value1 -eq value2 ]]
then
echo "The value1 = value2."
else
echo "The value1 < value2."
fi
例子:取第2个到最后的参数
parameter=" "
index=1
for arg in $*
do
#echo "arg: $index=$arg"
if [[index -gt 1]]
then
parameter=$parameter" "$arg
fi
let index+=1
done
echo {"parameter:" parameter}
3.查看容器
docker ps
查看所有的,包括停止的
docker ps -a
间隔1秒查看(-d表示高亮发生变化的部分) watch -d -n 1 docker ps
3.容器提交为镜像
docker commit -a "zst" -m "simple file" 0bb4323d7170 centos7.3:v2.0
4.从Dockerfile 启动一个镜像ubuntu-vs
sudo docker build -t ubuntu-vs .
5. 创建Dockerfile文件, vi Dockerfile
#导入一个镜像,可以是ubuntu,也可以是本地有的一个镜像
FROM my_ubuntu_cpp:v1
LABEL description="Container for use with Visual Studio"
# install build dependencies
RUN apt-get update && apt-get install -y g++ rsync zip openssh-server make
# configure SSH for communication with Visual Studio
RUN mkdir -p /var/run/sshd
RUN echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config && ssh-keygen -A
# expose port 30
EXPOSE 30
WORKDIR /workspace
COPY . /workspace
USER root
RUN mkdir /workspace/code/build && cd /workspace/code/build && cmake .. && make
加载dockerfile: docker build -t my_ubuntu:v1.0 .
5. 创建Dockerfile文件2, vi Dockerfile
FROM ubuntu:14.04
MAINTAINER Xinyuan Gui
RUN apt-get update && \
apt-get install -y \
build-essential \
cmake \
libgtk2.0-dev \
pkg-config \
libavcodec-dev libavformat-dev libswscale-dev \
libjpeg-dev libpng-dev libtiff-dev libjasper-dev \
libopencv-dev build-essential checkinstall cmake pkg-config yasm libjpeg-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev python-dev python-numpy libtbb-dev libqt4-dev libgtk2.0-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils
6. 删除镜像
docker image rm [image]
支持的子命令如下:
-f, -force: 强制删除镜像,即便有容器引用该镜像;
-no-prune: 不要删除未带标签的父镜像;
6.删除容器
docker rm 1a5fa469eadf
#删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了)
sudo docker rm $(sudo docker ps -a -q)
6.删除none镜像容器
docker rm $(docker ps -a | grep "Exited" | awk '{print $1 }')
//删除none容器
docker rmi $(docker images | grep "none" | awk '{print $3}')
//删除none镜像
6.查看docker占用文件大小和清理
docker system df命令,类似于Linux上的df命令,用于查看Docker的磁盘使用情况:
docker system prune命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。
6.删除指定名称的镜像
docker images | grep apollo* | awk '{print $3}'| xargs docker rmi
6.删除指定名称的容器
docker ps | grep ipeak_run* | awk '{print $1}'| xargs docker rm
7.仓库使用
给镜像打仓库标签: docker tag nginx xxx.com/test/nginx
登录仓库:docker login -u $USERNAME -p $PASSWD aliyun_xxx.com
向仓库推送镜像:docker push xxx.com/test/nginx
给最新版打latest: docker tag myimage-v1.9.1 myimage:latest
8.常用文件指令
#当前目录各个文件大小
du -h --max-depth=1
#根文件大小
df -h
#当前目录所有文件大小
du -sh
9.打包
tar -cvpf /tmp/system.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=boot .
cat base_img.tar | docker import - base_img:v1.0
10.nvidia docker
nvidia/cuda:9.0-base-centos7
https://hub.docker.com/r/nvidia/cuda
12.回到容器
docker exec -it 243c32535da7 /bin/bash
13.容器重启
docker container update --restart=always my_ubuntu(容器名字)
14.centos版本
cat /etc/redhat-release
15.镜像重命名
docker tag 旧镜像名 新镜像名
17.容器状态监控
docker stats
修改内存:
docker update -m 1500M --memory-swap 1500M 897a6a09807a
18. 输出内容
docker images | awk '{print $3}'
19 免密运行
password="123456"
echo ${password} | sudo docker run xxx
20 常见命令
当前目录文件大小:du -h --max-depth=1
21 shell 嵌套
run_sh="/data/soft/transfer_sample/run.sh"
parameter_run_sh=""$run_sh" "$*""
echo "paramter_run_sh:" $parameter_run_sh
sudo docker run --rm ipeak_run_centos7:v1.1 /bin/bash -c "$parameter_run_sh"
22 容器中挂载docker
docker run -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock
23 非sudo启动
1. 假设还没有docker group就加入一个:
sudo groupadd docker
2.将用户增加该group内。
然后退出并又一次登录就生效啦。
sudo gpasswd -a ${USER} docker
3.docker 试验
4.如果step3不成功,重新启动docker
sudo service docker restart
24.查看是ubuntu还是centos,以及版本号
head -n 1 /etc/issue