#docker安装与使用
1.安装所需的软件包 yum-utils
提供了yum-config-manager
效用,并device-mapper-persistent-data
和lvm2
由需要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