参考 https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04
安装 Docker 及初始配置
注意 如果执行的docker命令的时候 所登录的用户不是root或不在docker组内,需要添加到docker组内,否则会异常
docker run hello-world docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied. See 'docker run --help'.
有的报
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?. See 'docker run --help'.
解决办法:
参考https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04
的第二步
执行
sudo usermod -aG docker tieress
执行
su tieress
tieress@123
接下来执行
id -nG
tieress sudo docker
好了 添加上了。
如果需要添加其他用户 但是不是当前登录的用户 可以执行
sudo usermod -aG docker 用户名
测试docker 请在有权限执行docker的用户登陆的状态下
执行
docker run hello-world
有需要查找的镜像可执行
docker search 镜像关键词
结果里面找到需要的镜像之后 可以通过执行
docker pull 镜像名
的方式下载到server
下载好了之后 执行
docker run 镜像名
便可以了 【如果没有下载,会自动搜索安装找到的第一个镜像】
要查看下载了哪些镜像文件 可以执行
docker images
测试开启运行一个容器
执行
docker run -it ubuntu
启动的可以
docker start -i 4236201d32f7
执行完上述命令后 控制台会变成
root@4236201d32f7:/ 这样 @后面是容器的id 如果要删除这个容器的时候 可以通过这个ID来定位
注意 此时你已经是root用户了 即使你在宿主机【服务器】里是通过tieress登陆的
可以在不使用sudo的情况下执行命令,如执行:
apt update
或者执行下面的命令安装node.js
apt install nodejs
安装完nodejs可以通过执行
node -v
然后执行
exit
要管理Docker容器
执行
docker ps
执行
docker ps -a
-a, --all Show all containers (default shows just running)
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print containers using a Go template
-n, --last int Show n last created containers (includes all states) (default -1)
-l, --latest Show the latest created container (includes all states)
--no-trunc Don't truncate output
-q, --quiet Only display numeric IDs
-s, --size Display total file sizes
执行
docker start 容器ID
如
docker start 4236201d32f7
执行
docker stop 容器ID/容器名
如执行
docker stop interesting_shaw
当确定不需要某个容器的时候,可以执行
docker rm 容器ID/容器名
在容器中 提交对某Docker镜像的更改
启动了一个Docker镜像后,可以像在虚拟机中一样执行创建,修改,删除文件动作
所有的更改会且仅会对应用到该容器中。可以启动也可以停止它,一旦通过执行 docker rm
命令删除它之后,所有的更改都会丢失。
我们在这个容器【类似虚拟机】中所做的修改如果有价值,可以通过另存为一个新的镜像的方式保存下来。
前面我们对从repository上下载下来的ubuntu镜像做了一下编辑【安装了一个Node.js】 那么这个容器配置
就与原始的repository上的不一样了,如果我们以后需要这样的容器,我们可以通过执行提交来保存一个
新的镜像以后使用
执行
docker commit -m "i've added node.js to this container/image" -a "tieress owner li an" 4236201d32f7 hello/test_ubuntu_add_nodejs
-m 后面就是附注 m就是message的意思
-a 后面就是作者名 -a就是author的意思
作者后面就是 container的id
然后是DockerHub的用户名/你给这个镜像取得名字
执行完后 这个image会保存在本地
执行
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE hello/test_ubuntu_add_nodejs latest 88b034c80733 3 minutes ago 163MB ubuntu latest adafef2e596e 3 days ago 73.9MB hello-world latest bf756fb1ae65 6 months ago 13.3kB
看到没有 size比原始的大了
这种方式类似于搞了一个虚拟机快照
不过也可以通过Dockerfile的方式来构建image Dockerfile其实就是类似于.bat文件这种【shell脚本】
也是包含了很多指令,运行之就会去对应安装下载什么,配置什么,执行其他的操作之类的
提交本地镜像到DockerHub【或者其他的仓库】,用来分享也好,自己以后用也好。
对于需要高自己的Docker registry的可以看 https://www.digitalocean.com/community/tutorials/how-to-set-up-a-private-docker-registry-on-ubuntu-14-04
执行
docker login -u 用户名
注意:如果你的Docker registry的用户名与创建的镜像所附的用户名是不一样的 那需附注一下
执行
docker tag 本地镜像用户名/本地镜像名 docker-registry用户名/镜像名
如
docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs
提交执行
docker push hello/test_ubuntu_add_nodejs
提交完成后可以在Dockerhub中看到
以后可以执行
docker pull hello/test_ubuntu_add_nodejs