linux docker 操作

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.csdn.net/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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值