docker使用

#docker安装与使用
1.安装所需的软件包 yum-utils提供了yum-config-manager效用,并device-mapper-persistent-datalvm2由需要devicemapper存储驱动程序。

sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

2.使用以下命令来设置稳定的存储库。即使您想从边缘或测试存储库安装构建,也总是需要稳定的存储 库。

sudo yum-config-manager \
--add-repo https://download.docker.com/linux/centos/docker-ce.repo

3.可选:启用边缘和测试存储库。这些存储库包含在docker.repo上面的文件中,但默认情况下是禁用的。您可以将它们与稳定的存储库一起启用。

sudo yum-config-manager --enable docker-ce-edge
sudo yum-config-manager --enable docker-ce-test

您可以通过使用该标志运行该命令来禁用边缘或测试存储库 。要重新启用它,请使用标志。以下命令禁用边缘存储库。

sudo yum-config-manager --disable --enable

安装DOCKER CE

sudo yum install docker-ce

管理docker进程

#启动守护进程
service docker start
systemctl start docker.service
#停止守护进程
service docker stop
#重启守护进程
service docker retart

开机启动

chkconfig docker on

在docker index中搜索image

docker search <image>

下载镜像

docker pull <image>

查看所有镜像

docker images

查看运行中的镜像

docker ps #查看运行中的镜像
docker ps -a #查看运行中的和已停止的镜像

启动

docker run -i -t -e ROOT_PASS="123456" centos /bin/bash

以后台进程方式长期运行此镜像实例:

#创建并启动容器,相当于先create再start
docker run -d -p 22 -p 80:8080 centos /bin/bash -D
#开启/停止/重启container
docker start/stop/restart <container>
#再次运行某个container (包括历史container)
docker start [container_id]
#启动一个container并进入交互模式(相当于先start,在attach)
docker start -i <container>
#使用image创建container并进入交互模式, login shell是/bin/bash
docker run -i -t <image> /bin/bash
#映射HOST端口到容器,方便外部访问容器内服务,host_port可以省略,表示把container_port映射到一个动态端口。 
docker run -i -t -p <host_port:contain_port>

注:使用start是启动已经创建过得container,使用run则通过image开启一个新的container。

进入container(容器)
1.使用“docker attach”命令进入
这个时候container运行在后台,如果想进入它的终端,则:

docker attach [container_id]

就可以了。

2.使用docker exec -it命令进入
使用docker attach命令进入container(容器)有一个缺点,那就是每次从container中退出到前台时,container也跟着退出了。
要想退出container时,让container仍然在后台运行着,可以使用docker exec -it命令。每次使用这个命令进入container,当退出container后,container仍然在后台运行,命令使用方法如下:

docker exec -it [container_id] /bin/bash

goofy_almeida:要启动的container的名称
/bin/bash:在container中启动一个bash shell
这样退出container时,这个container仍然在后台运行

3.退出container
输入:

exit

或者按键:

Ctrl + C

通过容器生成新的镜像
运行中的镜像称为容器。你可以修改容器(比如删除一个文件),但这些修改不会影响到镜像。不过,你使用docker commit <container-id> <image-name>命令可以把一个正在运行的容器变成一个新的镜像。
docker commit <container> [repo:tag]将一个container固化为一个新的image,后面的repo:tag可选。

[root@devops-kubernetes ~]# docker commit -m "update jenkins" -a "you" 0575564315f2 you/jenkins:2.0
sha256:398b8dac689a45f292cf4c0ef9d94eccff73dda1f9a08fd22a1c5183908b4554

export命令用于持久化容器

docker export <CONTAINER ID> > /tmp/export.tar

持久化镜像
Save命令用于持久化镜像

docker save 镜像ID > /tmp/save.tar

导入持久化container
删除container 2161509ff65e

docker rm 2161509ff65e

导入export.tar文件

cat /tmp/export.tar | docker import - export:latest

查看全部container,包括exited的容器,并列出容器的大小

docker ps -as

删除容器

#删除一个或多个container
docker rm <container...>
#删除所有的container
docker rm `docker ps -a -q`
#同上, 删除所有的container
docker ps -a -q | xargs docker rm

#docker私有仓库使用
安装docker私有仓库

docker run -d \
-v /opt/data/registry:/var/lib/registry \
-p 5000:5000 \
--restart=always \
--privileged=true \
--name registry registry:latest

-v /home/hzq/registry:/var/lib/registry默认情况下,会将仓库存放于容器内的/var/lib/registry目录下,指定本地目录挂载到容器。
-p 5000:5000端口映射
--restart=always1在容器退出时总是重启容器,主要应用在生产环境
--privileged=true在CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权,不加上传镜像会报权限错误OSError: [Errno 13] Permission denied: ‘/tmp/registry/repositories/liibrary’或者Received unexpected HTTP status: 500 Internal Server Error错误
--name registry指定容器的名称

上传docker镜像到私有仓库
1.查看镜像

[root@devops ~]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
you/jenkins                   1.0                 f79922e0fbcd        46 hours ago        813 MB
registry                      latest              d1fd7d86a825        2 months ago        33.3 MB

2.标记要上传的镜像
这里我们要上传you/jenkins这个镜像

sudo docker tag you/jenkins:1.0 10.211.55.130:5000/jenkins:latest
[root@devops ~]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
10.211.55.130:5000/jenkins    latest              f79922e0fbcd        46 hours ago        813 MB
you/jenkins                   1.0                 f79922e0fbcd        46 hours ago        813 MB
registry                      latest              d1fd7d86a825        2 months ago        33.3 MB

3.上传镜像

docker push 10.211.55.130:5000/jenkins:latest

这里会提示

[root@devops-kubernetes ~]# docker push 10.211.55.130:5000/jenkins:latest
The push refers to a repository [10.211.55.130:5000/jenkins]
Get https://10.211.55.130:5000/v1/_ping: http: server gave HTTP response to HTTPS client

因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问。修改docker启动配置文件(此处是修改10.211.55.130机器的配置)centos7下配置文件地址为:/usr/lib/systemd/system/docker.service,在其中增加--insecure-registry 10.211.55.130:5000如下所示:

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd --insecure-registry 10.211.55.130:5000
ExecReload=/bin/kill -s HUP $MAINPID

修改完成后重启docker服务service docker restart
然后又会提示下面的错误,运行一下提示中的systemctl daemon-reload命令就好了,接下了就可以push镜像了

[root@devops-kubernetes system]# service docker restart
Redirecting to /bin/systemctl restart docker.service
Warning: docker.service changed on disk. Run 'systemctl daemon-reload' to reload units.
[root@devops-kubernetes ~]# docker push 10.211.55.130:5000/jenkins:latest
The push refers to a repository [10.211.55.130:5000/jenkins]
b388a895df11: Pushed 
cd72282d9a37: Pushed 
013f6ee00412: Pushed 
740984faaa0a: Pushed 
aea2ab5b78c8: Pushed 
7f20b7911212: Pushed 
da7ba4ad34b1: Pushed 
6f9e4ef7bc54: Pushed 
1adde5501926: Pushed 
08e86675b260: Pushed 
f13f2ed744a0: Pushed 
79f2e01e317e: Pushed 
ae8c371ff22b: Pushed 
a64142d97d81: Pushed 
63a44082bdd6: Pushed 
e274fc8d8636: Pushed 
2ec7ab21b21e: Pushed 
3cab8f2f62c3: Pushed 
c8718ae77a2a: Pushed 
a6afffb1947c: Pushed 
f7d58f758444: Pushed 
8568818b1f7f: Pushed 
latest: digest: sha256:1de110d5cbd9538e14f5c43250246bee2f20f4681f65add783417536f7fdbb00 size: 4919

管理仓库中的镜像

[root@server01 ~]# curl http://10.211.55.130:5000/v2/_catalog     
{"repositories":["jenkins"]} 
[root@server01 ~]# curl http://10.211.55.130:5000/v2/centos/tags/list 
{"name":"jenkins","tags":["latest"]} 

拉取镜像如下

[root@devops-docker-1 ~]# docker pull 10.211.55.130:5000/jenkins
Using default tag: latest
latest: Pulling from jenkins
b44e74d47700: Pull complete 
cee737366e03: Pull complete 
c2ec18820a60: Pull complete 
369053878a25: Pull complete 
97402f6393c7: Pull complete 
50a23dbc2b93: Pull complete 
4f0d7ed61b40: Pull complete 
43ea00fee0b3: Pull complete 
4885c0f53564: Pull complete 
efb029ac4127: Pull complete 
16b298fd6c70: Pull complete 
305817bd014c: Pull complete 
831357ae8127: Pull complete 
6c6ee1fb5ebe: Pull complete 
5473781b2c1a: Pull complete 
f28a5ce2984f: Pull complete 
2988c752d9ec: Pull complete 
ec1e507c8f06: Pull complete 
8166725418a6: Pull complete 
4f55b1bbdee3: Pull complete 
f7764035c2af: Pull complete 
1d07d0796313: Pull complete 
Digest: sha256:1de110d5cbd9538e14f5c43250246bee2f20f4681f65add783417536f7fdbb00
Status: Downloaded newer image for 10.211.55.130:5000/jenkins:latest

#通过dockerfile安装jenkins镜像
dockerfile
路径/root/jenkins/Dockerfile
内容:

FROM jenkins
USER root
RUN apt-get update && apt-get install -y sudo && rm -rf /var/lib/apt/lists/* 
RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers
USER jenkins

编译dockerfile,在/root/jenkins/下执行下面的命令

#-t 表示镜像的名称 冒号后面表示镜像的版本号  最后的点表示编译本文件夹下面的所有dockerfile文件
sudo docker build -t="you/jenkins:1.0" .

启动Jenkins容器

sudo docker run --memory 1.5G \
--dns 10.15.13.12 \
--name you-jenkins -p 18181:8080 -p 50000:50000 -u root -d \
--env JAVA_OPTS="-Xms256m -Xmx512m  -XX:MaxNewSize=256m" \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /home/you/jenkins:/var/jenkins_home \
-v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 you/jenkins:1.0

-v /var/run/docker.sock:/var/run/docker.sock-v /usr/bin/docker:/usr/bin/docker是把宿主机docker 映射到容器内。
-v /home/you/jenkins:/var/jenkins_home指定Jenkins的宿主机存储路径
-v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7在centos7 系统下会出现个别的包丢失,对应的引下宿主机的包就可以。

docker在容器内构建的时候,如果出现权限不够什么的。可以在宿主机中使用以下两种方式:

sudo chmod 777 /var/run/docker.sock

或者

usermod -a -G docker jenkin

#卸载
列出你安装过的包

yum list installed | grep docker
docker-engine.x86_64   1.7.1-1.el7 @/docker-engine-1.7.1-1.el7.x86_64.rpm

删除安装包

sudo yum -y remove docker-engine.x86_64
1

删除镜像/容器等

rm -rf /var/lib/docker

挂载目录管理

docker volume -h
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值